2016-12-29 30 views
0

我是新来的python和tkinter,想知道如何将两个spinbox连接在一起,这样当我滚动一个,另一个自动滚动它。如何制作2个旋转箱,每个旋转箱具有不同的信息,同时滚动到一起?

我设法使这项工作是这样的:

names1 = open('textfile_I_imported', 'r') 
    names1_file = names.read() 

    names2 = open('diff_texfile_I_imported', 'r') 
    names2_file = names2.read() 

    spinvalue = tk.StringVar() 

    spinbox1=tk.Spinbox(self, textvariable=spinvalue, values=(textfile_I_imported)) 
    spinbox1.config(width='25') 
    spinbox1.place(x=55, y=145) 

    spinbox2=tk.Spinbox(self, textvariable=spinvalue, values=(diff_textfile_I_imported)) 
    spinbox2.config(width='45') 
    spinbox2.place(x=225, y=145) 

但是,这使得在两个spinboxes相同的信息显示。

我该如何做到这一点,使通过spinbox1滚动使spinbox2同时滚动,同时显示不同信息?

回答

1

您可以使用command=将功能分配到Spinbox es。

函数可以在一个Spinbox中获取选定值,在所有值列表中找到它的索引,从具有相同索引的第二个列表值中获取并在第二个Spinbox中使用。

import tkinter as tk 

def sb1_changed(): # first spinbox 
    selected = sb1_var.get()  
    idx = vals1.index(selected) 
    print('selected:', selected) 
    print('index:', idx) 
    sb2_var.set(vals2[idx]) 

def sb2_changed(): # second spinbox 
    selected = sb2_var.get() 
    idx = vals2.index(selected) 
    print('selected:', selected) 
    print('index:', idx) 
    sb1_var.set(vals1[idx]) 

# --- main --- 

vals1 = ['A', 'B', 'C'] 
vals2 = ['1', '2', '3'] 

root = tk.Tk() 

sb1_var = tk.StringVar() 
sb2_var = tk.StringVar() 

sb1 = tk.Spinbox(root, textvariable=sb1_var, values=vals1, command=sb1_changed) 
sb1.pack() 

sb2 = tk.Spinbox(root, textvariable=sb2_var, values=vals2, command=sb2_changed) 
sb2.pack() 

root.mainloop() 

也许使用的参数,你可以只使用一个功能和执行changed(sb1, sb2)changed(sb2, sb1)

+0

谢谢你 - 这是非常有用的。 – MarkyMark