我正在使用python来创建用户界面应用程序。我正在使用tkinter进行UI。我创建了三个小部件(两个按钮和一个标签)。按下按钮时,我想要执行一个方法,该方法在订单中完成以下任务。
这是我如何对此进行编码。
from ttk import *
from Tkinter import *
from pygame import *
import time
root=Tk()
n=2
global cmajorBox
global dmajorBox
mixer.init()
def cMajor1():
currentChordVariable.set("C MAJOR") #l1
cmajorBox.config(bg = "red") #l2
print 'c major' #l3
mixer.music.load('c major.mp3') #l4
mixer.music.play() #l5
time.sleep(n) #l6
cmajorBox.config(bg="black") #l7
def dMajor1():
currentChordVariable.set("D MAJOR")
dmajorBox.config(bg="red")
print 'd major'
mixer.music.load('d major.mp3')
mixer.music.play()
time.sleep(n)
dmajorBox.config(bg="black")
cubeFrame=Frame(root)
cubeFrame.grid(row=1,column=1)
cmajorBox =Button(cubeFrame,text="cmajor",bg="black",
fg="white",padx=5.5,pady=20,command=cMajor1)
cmajorBox.grid(row = 1, column = 1)
dmajorBox = Button(cubeFrame,text="dmajor",bg="black",
fg="white",padx=5.5,pady=20,command=dMajor1)
dmajorBox.grid(row = 1, column =2)
currentChordVariable=StringVar()
currentChordDisplay = Label(root,
textvariable=currentChordVariable,bg="red",
fg="white",padx=70,pady=50)
currentChordDisplay.grid(row=2, column=1)
mainloop()
n表示音频应该播放多长时间。这是下一个代码开始的延迟。我已经提到了代码中的行号。运行时代码依此类推(l3,l4,l5,l6,l1,l2,l7)。我不知道为什么会这样。即使我在延迟之前对其进行了编码,也只能在延迟后处理颜色更改和名称更新以解决此问题。 这只是我整个应用程序的一小部分。我正在使用像这样的24个按钮。我现在坚持这个。请帮忙。
答案 0 :(得分:0)
该函数中的前两行代码修改了GUI的部分内容,但这些修改不会立即显示在屏幕上;它们只有在GUI更新时才会显示。因为此代码位于按下按钮时运行的函数中,所以它在与内部Tkinter代码(通常定期刷新GUI)相同的线程中运行。这意味着整个函数必须在Tkinter的mainloop()
能够再次更新GUI之前完成运行,并使您的更改可见。
为了强制GUI手动更新,您可以在修改GUI部分的代码行之后使用root.update()
。完整的功能如下:
def cMajor1():
currentChordVariable.set("C MAJOR") #l1
cmajorBox.config(bg = "red") #l2
root.update()
print 'c major' #l3
mixer.music.load('c major.mp3') #l4
mixer.music.play() #l5
time.sleep(n) #l6
cmajorBox.config(bg="black") #l7