我搜索了很多,但是找不到这个代码不起作用的原因。它应该根据输入的bpm和bar来计算歌曲的时间,但是Label(Lb3)不会通过mins.set()命令更新(选择第一个菜单中的上方按钮)
from tkinter import *
ana = Tk()
ana.title("Ana Menü")
ana.geometry("245x170")
def bpm():
def brtb():
equ = int(Eb1.get()) * 4 / int(Eb2.get())
str(equ)
mins.set(equ)
bar = Tk()
bar.title("Bar to BPM")
bar.geometry("245x150")
Lb1 = Label(bar, text="Bar:")
Lb2 = Label(bar, text="Bpm:")
Lb3 = Label(bar, textvariable=mins)
Eb1 = Entry(bar, width=10)
Eb2 = Entry(bar, width=10)
Bb1 = Button(bar, text="Calculate", command=brtb)
Lb1.place(relx=0.15, rely=.05)
Lb2.place(relx=0.12, rely=.2)
Lb3.place(relx=.25, rely=.5)
Eb1.place(relx=0.4, rely=.05)
Eb2.place(relx=0.4, rely=.2)
Bb1.place(relx=.3, rely=.4)
bar.update_idletasks()
bar.mainloop()
def minu():
print("hi")
mins=StringVar()
B1 = Button(ana, command=bpm, text="bar to min", width=123, height=5)
B1.pack()
B2 = Button(ana, command=minu, text="min to bar", width=122, height=5)
B2.pack()
ana.mainloop()
这是在程序中使用多个
Tk()
的症状。只能使用Tk()
一次,所有其他窗口都必须使用Toplevel()
创建。试试这个:(从技术上讲,你可以多次使用
Tk()
,但你真的不应该;至少在你完全了解它的工作原理之前是这样。)编辑:您的代码还有一些其他问题:
Tk
调用和相应的mainloop()
调用李>place()
很诱人,但这应该是最后的手段。让tkinter使用pack()
和grid()
来计算把东西放在哪里。使用框架来制作可以排列的较小零件。使用place
对您来说意味着大量的工作,而且您的代码在其他计算机上看起来也不一样,这使得代码很难维护李>from module import *
),它会导致bug,并且不利于PEP8李>update_idletasks()
李>我会这样写的。即使这对你现在来说太先进了,我建议你使用这个模式并习惯它;这对你将来会有很大帮助
相关问题 更多 >
编程相关推荐