首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么tkinter Scale窗口小部件的响应速度如此之慢?

为什么tkinter Scale窗口小部件的响应速度如此之慢?
EN

Stack Overflow用户
提问于 2013-12-18 05:15:08
回答 2查看 860关注 0票数 1

我对代码了如指掌,但我不能理解为什么规模如此缓慢/反应迟钝。

代码语言:javascript
运行
复制
from tkinter import *

#main menu
def mmWindow():
    mmWindow=Tk()
    mmWindow.geometry('600x600')

#Page 1
def page1():
    master.title('Page 1')
    # set up a boolean for each page, when page click turn one boolean true and the rest false
    #look at frames, canvas looks like the main option
    #draw sliders 1-6
    Scale(master, from_=0, to=100).place(x=200, y=120)

#Page 2
def page2():
    master.title('Page 2')
    #draw sliders 7-12
    Scale(master, from_=0, to=100).place(x=300, y=120)
#Page 3
def page3():
    master.title('Page 3')
    #draw slider 13-18

#Page 4
def page4():
    master.title('Page 4')
    #draw sldiers 19-24

#Presets
def presets():
    master.title('Presets')

#settings
def settings():
    master.title('Settings')


#first window   
master= Tk()
master.geometry('1440x900+0+0')    
master.title('DMX512 Controller')

#buttons
bw=250
bh=110
img1 = PhotoImage(file="/Users/Josh/Documents/Uni/Year3/Diss/Images/Gif/mainmenu.gif")
img2 = PhotoImage(file="/Users/Josh/Documents/Uni/Year3/Diss/Images/Gif/p1.gif")
img3 = PhotoImage(file="/Users/Josh/Documents/Uni/Year3/Diss/Images/Gif/p2.gif")
img4 = PhotoImage(file="/Users/Josh/Documents/Uni/Year3/Diss/Images/Gif/p3.gif")
img5 = PhotoImage(file="/Users/Josh/Documents/Uni/Year3/Diss/Images/Gif/p4.gif")
img6 = PhotoImage(file="/Users/Josh/Documents/Uni/Year3/Diss/Images/Gif/presets.gif")
img7 = PhotoImage(file="/Users/Josh/Documents/Uni/Year3/Diss/Images/Gif/settings.gif")

Button(master, image=img1, command =mmWindow, width=bw, height=bh).place(x=1190,y=0)
Button(master, image=img2,command =page1).place(x=1190,y=120)
Button(master, image=img3, command =page2).place(x=1190,y=240)
Button(master, image=img4,command =page3).place(x=1190,y=360)
Button(master, image=img5, command =page4).place(x=1190,y=480)
Button(master, image=img6,command =presets).place(x=1190,y=600)
Button(master, image=img7,command =settings).place(x=1190,y=720)


#text
wtitle = Label (master, text = "Pi DMX", fg = 'blue')
wtitle.place(x = 640, y = 100)

master.mainloop()

(我知道,我也没有以最环保的方式编写我的代码。)

EN

回答 2

Stack Overflow用户

发布于 2014-03-26 18:39:24

我也遇到了同样的问题,并创建了一个(相当难看的)变通方法,在回调函数周围创建了一个包装器,以便在每次调用回调函数时都会调用刻度所在框架的update()方法。如果不使用回调函数,可以将self.update方法直接传递给Scale初始化器的命令参数。

这种方法是有效的,但感觉并不令人满意,而且有点老套。

代码语言:javascript
运行
复制
import tkinter as tk

class MainWindow(tk.Frame):

    def __init__(self, master=None, callback_funcs=None, max_rows=8):
        tk.Frame.__init__(self, master)
        self.grid()
        cb = lambda callback: lambda val: self.run_callback(callback, val) 
        self.callback_funcs = [cb(callback) for callback in callback_funcs]
        self.max_rows = max_rows
        self.create_scales()

    def run_callback(self, callback, val):
        self.update()
        callback(val)

    def create_scales(self):
        self.scales = []
        for callback in self.callback_funcs:
            scale = tk.Scale(from_=0, to=1, resolution=0.01, command=callback, orient=tk.HORIZONTAL)
            scale.grid()
票数 1
EN

Stack Overflow用户

发布于 2013-12-18 07:38:20

如果希望更改窗口的大小,请使用.geometry

代码语言:javascript
运行
复制
master.geometry('400x400')
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20644822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档