在标签

时间:2015-05-08 07:58:36

标签: python python-3.x tkinter

我刚开始使用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()

1 个答案:

答案 0 :(得分:0)

你实际上不需要2个班级,只需要一个班级。如果你仔细观察你的代码,你会注意到这两个类几乎相同,但有不同的字典。因此,您可以通过传递__init__值2个不同的词典来简单地从同一个类中实例化2个对象。

如果您希望在您从组合框中选择某些内容时其文字发生变化的Label,我不会从ttk.Combobox继承而是从Frame继承,以便您可以自定义您的课程使用ttk.ComboboxLabel

要设置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()