頂級編輯:這個問題原則上已在原始線程中得到解答 - 但是,有一些基本問題我想了解更多。請不要直接回答這個問題。如果它雜亂無章,我很樂意去除這個問題!Python/tKinter/ttk - 在按鈕單擊時傳遞一個對象
與此相關的問題,我昨天問:Python/ttk/tKinter - passing an argument with a button click func?
我嘗試一種新的方法,我可以(在某種程度上)得到它的工作,但是,只有當我「硬」的代碼功能,我試圖避免...
我有36個按鈕[az] & [0-9]。當用戶點擊按鈕時,彈出對話框,我想要記錄返回的顏色。
在課堂上的init,我宣佈了一些增值經銷商(所有設置顏色值白色):
class MakeGUI(Frame):
def __init__(self,root):
Frame.__init__(self, root)
self.root = root
##colour values
self.AVal = "#FFFFFF"
self.BVal = "#FFFFFF"
self.CVal = "#FFFFFF"
etc.
當我填充一個文本框,我用的顏色VAR爲BG ARG:
## letter labels
self.boxA = Text(self.mainframe, state='normal', width=3, height=1, background=self.AVal).grid(column=2, row=2, padx=4)
self.boxB = Text(self.mainframe, state='normal', width=3, height=1, background=self.BVal).grid(column=3, row=2, padx=4)
self.boxC = Text(self.mainframe, state='normal', width=3, height=1, background=self.CVal).grid(column=4, row=2, padx=4)
etc.
然後我設置的按鈕了:
self.bloba = ttk.Button(self.mainframe, text="A",style= 'mainSmall.TButton', command= lambda: self.getColour("self.AVal")).grid(column=2, row=3)
self.blobb = ttk.Button(self.mainframe, text="B",style= 'mainSmall.TButton', command= lambda: self.getColour("self.BVal")).grid(column=3, row=3)
self.blobc = ttk.Button(self.mainframe, text="C",style= 'mainSmall.TButton', command= lambda: self.getColour(("self.CVal")).grid(column=4, row=3)
注 - 我「送」的字符串的變種,因爲我可以不要讓對象正確地傳遞 - 理想情況下,我只想發送對象,但這是我可以開始工作的唯一工作。
然後我設置的FUNC鍵:
def getColour(self,glyphRef):
print self.AVal
(triple, hexstr) = askcolor()
if hexstr:
eval(glyphRef+"=hexstr")
print self.AVal
兩個打印語句是有監控的目的只爲我找出如何得到它的工作。
我也很清楚eval
方法是不可取或不理想的。我只是找不到讓我接近我的理想的解決方案的另一種方法....
此方法將引發錯誤:
#FFFFFF
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__
return self.func(*args)
File "colourPicker/colourTest.py", line 109, in <lambda>
self.bloba = ttk.Button(self.mainframe, text="A",style= 'mainSmall.TButton', command= lambda: self.getColour("self.AVal")).grid(column=2, row=3)
File "colourPicker/colourTest.py", line 161, in getColour
eval(glyphRef+"=hexstr")
File "<string>", line 1
self.AVal=hexstr
^
SyntaxError: invalid syntax
要嘗試和測試是怎麼回事,我努力在FUNC鍵編碼VAR:
def getColour(self,glyphRef):
print self.AVal
(triple, hexstr) = askcolor()
if hexstr:
self.AVal=hexstr
print self.AVal
這確實導致在var正在改變:
#FFFFFF
#24d9d9
這我我可以編寫36種不同的按鈕點擊功能,但這似乎與我們的直覺毫無關係......尤其是當我對課堂功能的理解很少時,它恰好可以處理這種挑戰!
任何建議感激地收到。
不是答案,但你應該做'print self.bloba'。我敢打賭,你會發現這不是你所期望的。 'object.grid()'不返回值。 'print self.boxA'也是一樣的。 –
謝謝 - 我最終將init值拋入'self.dict',然後從click func中更改字典。它與我錯過的昨天提供的解決方案結合起來!好的故障排除技巧雖然,謝謝! –