我試圖重建一個我正在開發的項目中遇到的問題,其中我的函數似乎正在運行後面的一個點擊。爲什麼我的功能在後麪點擊一下?
我有3個spinboxes。任何給定的前兩個spinbox中的值的組合都應該確定第三個值的值,該值取自一些嵌套列表。
例如,spinbox_1中的'0'和spinbox_2中的'A'應該將spinbox_3的值設置爲'1'。和spinboxes_2中的'1'和'A',以及spinbox_3中的'4'。但是,將spinbox_1從'0'滾動到'1'將使spinbox_3保持不變 - 只有當我再次單擊它時,纔會將其更改爲'4',屆時應該從'4'更改爲'7'。
from tkinter import *
import tkinter as tk
root = Tk()
sp1_values = [0, 1, 2]
abc_values = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
def set_default_in_sp3(args):
selected = var1.get()
idx = selected
lvl = var2.get()
if idx == 0:
if lvl == 'A':
var3.set(abc_values[0][0])
if lvl == 'B':
var3.set(abc_values[0][1])
if lvl == 'C':
var3.set(abc_values[0][2])
if idx == 1:
if lvl == 'A':
var3.set(abc_values[1][0])
if lvl == 'B':
var3.set(abc_values[1][1])
if lvl == 'C':
var3.set(abc_values[1][2])
if idx == 2:
if lvl == 'A':
var3.set(abc_values[2][0])
if lvl == 'B':
var3.set(abc_values[2][1])
if lvl == 'C':
var3.set(abc_values[2][2])
var1 = tk.IntVar()
var2 = tk.StringVar()
var3 = tk.IntVar()
spinbox_1=tk.Spinbox(textvariable=var1, values=sp1_values)
spinbox_1.pack()
spinbox_1.bind('<Button-1>', set_default_in_sp3)
spinbox_2=tk.Spinbox(values=('A', 'B', 'C'), textvariable = var2)
spinbox_2.pack()
spinbox_3=tk.Spinbox(from_=1, to=10, increment=1, textvariable = var3)
spinbox_3.pack()
spinbox_3.bind('<Button-1>', set_default_in_sp3)
root.mainloop()
在回答類似的問題也被張貼在SO(Tkinter Label bound to StringVar is one click behind when updating),涉及到一個列表框,並建議說:「最好的解決辦法是綁定到虛擬事件‘ListboxSelect’字樣的標籤,並儘量我所看到的有在Tkinter的紡紗器插件沒有類似的虛擬事件。
我如何去解決這個問題呢?
'spinbox'有一個命令屬性,可以讓你指定一個函數在修改完成後調用。 –
這似乎工作 - 感謝。但是,在我正在處理的項目中,命令屬性已分配給每個spinbox的另一個函數,是否有將多個函數分配給command屬性的方法? – MarkyMark