我刚开始使用Python。我有一些组合框,我想在标签上打印选定的值。对我来说很难,因为我使用字典。
有人可以帮我在标签上打印组合框值吗?
from tkinter import *
from tkinter import ttk
class NewCBox(ttk.Combobox):
def __init__(self, master, dictionary, *args, **kw):
ttk.Combobox.__init__(self, master, values=sorted(list(dictionary.keys())),
state='readonly', *args, **kw)
self.dictionary = dictionary
# purely for testing purposes
self.bind('<<ComboboxSelected>>', self.selected)
def value(self):
return self.dictionary[self.get()]
def selected(self, event): # Just to test
print((self.value()))
class NewCBox1(ttk.Combobox):
def __init__(self, master, dictionary, *args, **kw):
ttk.Combobox.__init__(self, master, values=sorted(list(dictionary.keys())),
state='readonly', *args, **kw)
self.dictionary = dictionary
# purely for testing purposes
self.bind('<<ComboboxSelected>>', self.selected)
def value(self):
return self.dictionary[self.get()]
def selected(self, event): # Just to test
print((self.value()))
lookup = {'Arkitekt': 'A', 'Geoteknik': 'B',
'Ingeniør Anlæg': 'C', 'Procesanlæg': 'D'}
documentcode = {'Aftaler': 'AGR', 'Analyse': 'ANA',
'Myndigheder': 'AUT', 'Sagsbasis': 'BAS'}
root = Tk()
newcb = NewCBox(root, lookup)
newcb.pack()
newcb1 = NewCBox1(root, documentcode)
newcb1.pack()
root.mainloop()
答案 0 :(得分:0)
你实际上不需要2个班级,只需要一个班级。如果你仔细观察你的代码,你会注意到这两个类几乎相同,但有不同的字典。因此,您可以通过传递__init__
值2个不同的词典来简单地从同一个类中实例化2个对象。
如果您希望在您从组合框中选择某些内容时其文字发生变化的Label
,我不会从ttk.Combobox
继承而是从Frame
继承,以便您可以自定义您的课程使用ttk.Combobox
和Label
。
要设置Label
的文字,您可以使用所有小部件共有的方法config(...)
。
请参阅下面的示例(如果您还有其他问题请注释):
import tkinter as tk
from tkinter import ttk
class LabeledCombobox(tk.Frame):
def __init__(self, master, dictionary, *args, **kw):
tk.Frame.__init__(self, master, *args, **kw)
self.dictionary = dictionary
self.combo = ttk.Combobox(self, values=sorted(list(dictionary.keys())),
state='readonly')
self.combo.current(0)
self.combo.pack(fill="both")
self.combo.bind('<<ComboboxSelected>>', self.on_selection)
self.label = tk.Label(self, text=self.value())
self.label.pack(fill="both", expand=True)
def value(self):
return self.dictionary[self.combo.get()]
def on_selection(self, event=None): # Just to test
self.label.config(text=self.value())
lookup = {'Arkitekt': 'A', 'Geoteknik': 'B',
'Ingeniør Anlæg': 'C', 'Procesanlæg': 'D'}
documentcode = {'Aftaler': 'AGR', 'Analyse': 'ANA',
'Myndigheder': 'AUT', 'Sagsbasis': 'BAS'}
if __name__ == "__main__":
root = tk.Tk()
root.title("Labeled comboboxes")
combo1 = LabeledCombobox(root, lookup, bd=1, relief="groove")
combo1.pack(side="left", padx=(2, 2), pady=5)
combo2 = LabeledCombobox(root, documentcode, bd=1, relief="groove")
combo2.pack(side="right", padx=(2, 2), pady=5)
root.mainloop()