我相信这段代码很接近 - 我有三个按钮定义了一个回调来存储与所选按钮相关的IntVar()变量。我创建了一个临时变量(cntr)来存储相应的Intvar。这似乎是基于我在回调中的打印语句。但是当我选择其中一个按钮然后点击代码末尾配置的inc或dec按钮时,唯一的“输入”按钮就是在代码主要部分设置的按钮。任何人都可以告诉我我缺少的东西
#!/usr/bin/python3
from tkinter import *
from tkinter import PhotoImage
def increment (cntr):
print('in inc', cntr)
cntr.set("{0:0>4}".format(cntr.get() + 1))
def decrement (cntr):
print('in dec', cntr)
cntr.set("{0:0>4}".format(cntr.get() - 1))
def EntryCB(arg):
global cntr
cntr = arg
print('in EntryCB', cntr, arg)
root = Tk()
root.configure(bg='white')
frame1 = LabelFrame(root, text="Component 1",)
frame1.grid()
#UpArrow = PhotoImage(file="images//UpArrow.png")
#DownArrow = PhotoImage(file="images/DownArrow.png")
counter1 = IntVar()
counter1.set("{0:0>4}".format(0))
counter2 = IntVar()
counter2.set("{0:0>4}".format(0))
counter3 = IntVar()
counter3.set("{0:0>4}".format(0))
cntr=counter1
print('in main', cntr)
#setup entry buttons tied to IntVar variables
Entry1 = Button(frame1, textvariable=counter1)
Entry1.grid(row=0, column=0)
Entry1.config(command= lambda arg=counter1:EntryCB(arg))
Entry1.configure(borderwidth=3, relief='sunken', bg='green')
Entry2 = Button(frame1, textvariable=counter2)
Entry2.grid(row=0, column=1)
Entry2.config(command= lambda arg=counter2:EntryCB(arg))
Entry2.configure(borderwidth=3, relief='sunken', bg='pink')
Entry3 = Button(frame1, textvariable=counter3)
Entry3.grid(row=0, column=2)
Entry3.config(command= lambda arg=counter3:EntryCB(arg))
Entry3.configure(borderwidth=3, relief='sunken', bg='orange')
#setup callback and display control buttons to increment or decrement the IntVar
Inc = Button(frame1,text='Inc')
Inc.grid(row=1, column=0)
Inc.configure(command= lambda arg=cntr:increment(arg))
Dec = Button(frame1,text='Dec')
Dec.grid(row=1, column=1)
Dec.configure(command= lambda arg=cntr:decrement(arg))
root.mainloop()
答案 0 :(得分:0)
好的 - 多玩一点 - 这是一个答案 - 但是使用我发布的原始代码必须有更优雅的东西 - 我只是不明白为什么原始代码不起作用。谢谢你提前看到它
from tkinter import *
from tkinter import PhotoImage
def increment (event):
global cntr
print('in inc', cntr)
cntr.set("{0:0>4}".format(cntr.get() + 1))
def decrement (event):
global cntr
print('in dec', cntr)
cntr.set("{0:0>4}".format(cntr.get() - 1))
def EntryCB(arg):
global cntr, counter1, counter2, counter3
if arg == 1:
cntr=counter1
elif arg == 2:
cntr=counter2
elif arg == 3:
cntr=counter3
print('in EntryCB', cntr, arg)
root = Tk()
root.configure(bg='white')
frame1 = LabelFrame(root, text="Component 1",)
frame1.grid()
#UpArrow = PhotoImage(file="images//UpArrow.png")
#DownArrow = PhotoImage(file="images/DownArrow.png")
counter1 = IntVar()
counter1.set("{0:0>4}".format(0))
counter2 = IntVar()
counter2.set("{0:0>4}".format(0))
counter3 = IntVar()
counter3.set("{0:0>4}".format(0))
cntr=1
print('in main', cntr)
Entry1 = Button(frame1, textvariable=counter1)
Entry1.grid(row=0, column=0)
Entry1.config(command= lambda arg=1:EntryCB(arg))
Entry1.configure(borderwidth=3, relief='sunken', bg='green')
Entry2 = Button(frame1, textvariable=counter2)
Entry2.grid(row=0, column=1)
Entry2.config(command= lambda arg=2:EntryCB(arg))
Entry2.configure(borderwidth=3, relief='sunken', bg='pink')
Entry3 = Button(frame1, textvariable=counter3)
Entry3.grid(row=0, column=2)
Entry3.config(command= lambda arg=3:EntryCB(arg))
Entry3.configure(borderwidth=3, relief='sunken', bg='orange')
Inc = Button(frame1,text='Inc')
Inc.bind("<Button-1>",increment)
Inc.grid(row=1, column=0)
#Inc.configure(command= lambda arg=cntr:increment(arg))
Dec = Button(frame1,text='Dec')
Dec.bind("<Button-1>",decrement)
Dec.grid(row=1, column=1)
#Dec.configure(command= lambda arg=cntr:decrement(arg))
root.mainloop()