我试图做的是点击按钮后,它下方的标签增加1。我老实说无处可去,因为我改变了一件事并且我得到了一个错误,我修复了这个错误而我得到了另一个错误。
下面是我的代码示例,我不知道我做错了什么:
#!/usr/bin/env python3
from tkinter import *
from tkinter import ttk
count1=0
count2=0
count3=0
def vote(voting)
voting.set +=1
lbl1.set(text= count1)
lbl2.set(text=count2)
lbl3.set(text=count3)
root = Tk()
frame = ttk.Frame(root)
b1 = ttk.Button(frame, text="v1", command=vote(count1))
b1.grid(row=2,column=1)
b2 = ttk.Button(frame, text="v2", command=vote(count2))
b2.grid(row=2,column=2)
b3 = ttk.Button(frame, text="v3", command=vote(count3))
b3.grid(row=2,column=3)
lbl1 = ttk.Label(frame, text=count1)
lbl2 = ttk.Label(frame, text=count2)
lbl3 = ttk.Label(frame, text=count3)
lbl1.grid(row=3,column=1)
lbl2.grid(row=3,column=2)
lbl3.grid(row=3,column=3)
frame.grid(column = 0, row = 0, sticky = (N, W, E, S))
root.mainloop()
答案 0 :(得分:1)
首先,命令参数必须是函数,而不是函数的结果,因此它不能包含()
。如果必须传递参数,则需要创建辅助函数。您可以使用functools.partial或lambda动态地执行此操作,但在这种情况下,我认为以正常方式简单地生成3个辅助函数更容易。
其次,使用IntVar会容易得多,因此Label会自动更新。我想你无论如何都想这样做,因为set()是一个Variable方法,而不是Label方法。
#!/usr/bin/env python3
from tkinter import *
from tkinter import ttk
def vote1():
count1.set(count1.get() + 1)
def vote2():
count2.set(count2.get() + 1)
def vote3():
count3.set(count3.get() + 1)
root = Tk()
count1=IntVar()
count2=IntVar()
count3=IntVar()
frame = ttk.Frame(root)
b1 = ttk.Button(frame, text="v1", command=vote1)
b1.grid(row=2,column=1)
b2 = ttk.Button(frame, text="v2", command=vote2)
b2.grid(row=2,column=2)
b3 = ttk.Button(frame, text="v3", command=vote3)
b3.grid(row=2,column=3)
lbl1 = ttk.Label(frame, textvariable=count1)
lbl2 = ttk.Label(frame, textvariable=count2)
lbl3 = ttk.Label(frame, textvariable=count3)
lbl1.grid(row=3,column=1)
lbl2.grid(row=3,column=2)
lbl3.grid(row=3,column=3)
frame.grid(column = 0, row = 0, sticky = (N, W, E, S))
root.mainloop()
然而,这将是一个子类的理想位置,它将这些东西捆绑在一个新的可重用小部件中。
#!/usr/bin/env python3
from tkinter import *
from tkinter import ttk
class Mick(Frame):
def __init__(self, master=None, text='', **kwargs):
Frame.__init__(self, master, **kwargs)
self.var = IntVar()
btn = ttk.Button(self, text=text, command=self.vote)
btn.grid(row=0,column=0)
lbl = ttk.Label(self, textvariable=self.var)
lbl.grid(row=1,column=0)
def vote(self):
self.var.set(self.var.get() + 1)
root = Tk()
frame = ttk.Frame(root)
for i in range(4): # set number of voting boxes here
b1 = Mick(frame, text='v'+str(i))
b1.grid(row=0, column=i)
frame.grid(column = 0, row = 0, sticky = (N, W, E, S))
root.mainloop()
现在,您可以轻松扩展它以制作任意数量的投票块!