首先,我创建了一个带有一些按钮的窗口,然后我定义了它们的命令。一切正常,直到我添加while循环来检查是否按下了任何按钮,然后转到下一步。但是窗口没有出现,循环就一直在运行。我还想知道我的代码是否有更好的替代方案。
from tkinter import *
Round = 0
def blackC():
global Round
print ('0')
x = 0
Round += 1
def brownC():
global Round
print ('1')
x = 1
Round +=1
def redC():
global Round
print ('2')
x = 2
Round += 2
def win():
window = Tk()
window.geometry ('500x500')
window.title('HELLO')
blackB = Button(text = 'BLACK', command=blackC, width=7, height=3, bd=5)
blackB.place(x=1, y=1)
brownB = Button(text = 'BROWN', command=brownC, width=7, height=3, bd=5)
brownB.place(x=86, y=1)
redB = Button(text = 'RED', command=redC, width=7, height=3, bd=5)
redB.place(x=172, y=1)
window.mainloop()
while (Round == 0):
win()
while (Round < 3):
if (Round == 1):
y = x * 10
print ('y')
elif (Round == 2):
y += x
print ('y')
答案 0 :(得分:1)
我不知道你进入下一步到底意味着什么,但你肯定误解了tkninter的工作方式。您缺少主循环window.mainloop()
中的括号。
并且你不想在循环中调用它,因为mainloop是一个循环的函数。所以你只需要运行一次,然后无限运行。所以你的代码必须只运行一次函数win()。
from tkinter import *
Round=0
def button(type):
global Round
print (str(type))
x = type
Round += type
def win():
window = Tk()
window.geometry ('500x500')
window.title('HELLO')
blackB = Button(text = 'BLACK', command=lambda: button(0), width=7, height=3, bd=5)
blackB.place(x=1, y=1)
brownB = Button(text = 'BROWN', command=lambda: button(1), width=7, height=3, bd=5)
brownB.place(x=86, y=1)
redB = Button(text = 'RED', command=lambda: button(2), width=7, height=3, bd=5)
redB.place(x=172, y=1)
window.mainloop
win()
你已经要求更好的代码,所以我已经重写了你的按钮功能,只需要一个类型的参数,并将其称为lambda函数(看看:http://www.diveintopython.net/power_of_introspection/lambda_functions.html。 对于较大的项目,最好将tkinter窗口作为一个类,但这就足够了。