2017-10-13 104 views
0

我相信這段代碼是關閉的 - 我有三個按鈕用回調定義,用於存儲與所選按鈕關聯的IntVar()變量。我創建了一個臨時變量(cntr),用於存儲相應的Intvar。這似乎是基於我在回調中的打印聲明工作。但是當我選擇其中一個按鈕時,點擊在代碼末尾配置的inc或dec按鈕,唯一改變的「entry」按鈕就是在代碼的主要部分中設置的那個按鈕。誰能告訴我什麼我缺少使用相同的2個控制按鈕控制多個輸入按鈕

#!/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

確定 - 它多一點玩 - 這裏是一個答案 - 但也有采用原代碼,我張貼的東西更優雅的 - 我只是不明白爲什麼原始代碼不起作用。預先感謝您看看它

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