循环时的Tkinter机智(python 3)

时间:2014-11-09 17:46:30

标签: python tkinter

首先,我创建了一个带有一些按钮的窗口,然后我定义了它们的命令。一切正常,直到我添加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')

1 个答案:

答案 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窗口作为一个类,但这就足够了。