使用相同的2个控制按钮控制多个输入按钮

时间:2017-10-13 19:27:49

标签: python-3.x tkinter

我相信这段代码很接近 - 我有三个按钮定义了一个回调来存储与所选按钮相关的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()

1 个答案:

答案 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()