我有一个小的GUI测试,带有"开始"按钮和进度条.期望的行为是:
观察到的行为是"开始"按钮冻结5秒钟,然后显示进度条(无振荡).
到目前为止,这是我的代码:
class GUI:
def __init__(self, master):
self.master = master
self.test_button = Button(self.master, command=self.tb_click)
self.test_button.configure(
text="Start", background="Grey",
padx=50
)
self.test_button.pack(side=TOP)
def progress(self):
self.prog_bar = ttk.Progressbar(
self.master, orient="horizontal",
length=200, mode="indeterminate"
)
self.prog_bar.pack(side=TOP)
def tb_click(self):
self.progress()
self.prog_bar.start()
# Simulate long running process
t = threading.Thread(target=time.sleep, args=(5,))
t.start()
t.join()
self.prog_bar.stop()
root = Tk()
root.title("Test Button")
main_ui = GUI(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
基于从布赖恩奥克利的信息在这里,我明白,我需要使用线程.我尝试创建一个线程,但我猜测,因为线程是从主线程中启动的,所以没有用.
我有想法放置在不同的类中的逻辑部分,以及从该类,类似于由A.罗达斯示例代码内实例化GUI 这里.
我的问题:
我无法弄清楚如何编码它,以便这个命令:
self.test_button = Button(self.master, command=self.tb_click)
Run Code Online (Sandbox Code Playgroud)
调用位于另一个类中的函数.这是一件坏事还是可能?我如何创建一个可以处理self.tb_click的第二类?我试着跟随A. Rodas的示例代码,它的工作非常精彩.但是我无法弄清楚如何在触发动作的Button小部件的情况下实现他的解决方案.
如果我应该在单个GUI类中处理线程,那么如何创建一个不干扰主线程的线程呢?
好的,所以我只是想弄清楚为什么我的代码不像我想的那样工作.
我正在构建一个GUI,我希望在Label文本变量上显示文本.我已经创建了一个函数,在调用函数时更新Label,但当然这不是我的问题.
我的问题源于我试图实现"一次打印一个字母"类型的标签.虽然它打印到我想要的终端它,标签插件的整体功能后才更新已经完成(在视觉上它和上面一样打印整个字符串,而不是打印一次一个字母).
所以我错过了什么,我不明白什么?你们能帮助我吗?让我发布一些代码,以便你们可以看到我的错误.
我独立尝试了这两个,他们都给我带来了相同的结果,这不是我想要的.
def feeder(phrase):
"""Takes a string and displays the content like video game dialog."""
message = ""
for letter in phrase:
time.sleep(.15)
message += letter
information.set(message)
#print message
def feeder2(phrase):
"""Same as feeder, but trying out recursion"""
current.index += 1
if current.index <= len(phrase):
information.set(phrase[:current.index])
time.sleep(.1)
feeder2(current.status())
Run Code Online (Sandbox Code Playgroud)
如果我需要发布更多代码,我不是肯定的,所以你们可以更好地理解,但如果是这样的话,我会这样做.
这个功能使用了这两个功能
def get_info():
"""This function sets the textvariable information."""
#information.set(current)
feeder2(current.status())
Run Code Online (Sandbox Code Playgroud)
而这又用于此功能
def validate():
""" This function checks our guess and keeps track of our statistics …Run Code Online (Sandbox Code Playgroud) 我的问题与此类似:Python TKinter multiple actions。但是,提供的答案对我没有帮助,因为它指向一篇包含可能使用的函数列表的文章。我想看看该解决方案的实际实施。
我的问题:我的框架上有两个按钮。只要切换变量设置为 true,一键即可调用“执行”函数。第二个按钮将切换值设置为 False。我希望“执行”功能在按下执行按钮后继续运行,但在按下第二个(切换错误)按钮时停止。然而,一旦我按下“执行”,框架就会卡住。我理解它是因为回调。我怎样才能解决这个问题?这是我的示例代码:
from Tkinter import *
from time import sleep
class App:
def __init__(self, master):
self.toggle = False
frame = Frame(master)
frame.pack()
self.exeButton = Button(frame, text="Execute", fg="blue", command=self.execute)
self.exeButton.pack(side=LEFT)
self.tOffButton = Button(frame, text="Toggle Off", command=self.toggleOff)
self.tOffButton.pack(side=LEFT)
def execute(self):
self.toggle = True
while(self.toggle):
print "hi there, everyone!"
sleep(2)
def toggleOff(self):
self.toggle = False
root = Tk()
app = App(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)