繁体   English   中英

使用 Tkinter function 创建多个下拉菜单并允许用户 select 并显示不同的选项

[英]Using Tkinter function to create multiple drop-down menus and allowing user to select and display different options

我目前面临一个问题,我无法从 Tkinter 的每个下拉菜单中获得不同的不同 output。

我的代码的目的是在附加的下图中获得类似的 output:“理想的输出,预期结果”。 在此处输入图像描述

但是,这是我得到的当前结果,附在:“当前结果”中。 在此处输入图像描述

下面是我附加的代码。

我将不胜感激任何形式的建议或帮助。


import tkinter as tk
from tkinter import ttk

class TestFrame(tk.Frame):
    def __init__(self):
        super().__init__()
        self.dimension =('106','108','110','112','114','126','128','130','132','134','136','138','140','146','148','150','152','154','360','380','400','420','440','500', '520', '540',
                        '560', '580', '600','780','800','820')
        self.option_var = tk.IntVar(self)
        #self.create_widgets()
        #self.create_widgets_1()
        
        paddings = {'padx': 5, 'pady': 5}
        label = ttk.Label(self,  text='Select the dimension for ODD_X1:').grid(column=0, row=0, sticky=tk.W, **paddings)
        #ODD_X1
        option_menu = ttk.OptionMenu(
            self,
            self.option_var,
            self.dimension[0],
            *self.dimension,
            command=self.option_changed)
        option_menu.grid(column=1, row=0, sticky=tk.W, **paddings)
        self.output_label = ttk.Label(self, foreground='red')
        self.output_label.grid(column=0, row=1, sticky=tk.W, **paddings)
        
        paddings = {'padx': 5, 'pady': 5}
        ttk.Label(self,  text='Select the dimension for ODD_Y1:').grid(column=3, row=0, sticky=tk.W, **paddings)
        option_menu = ttk.OptionMenu(
            self,
            self.option_var,
            self.dimension[0],
            *self.dimension,
            command=self.option_changed)
        option_menu.grid(column=4, row=0, sticky=tk.W, **paddings)
        self.output_label = ttk.Label(self, foreground='red')
        self.output_label.grid(column=4, row=1, sticky=tk.W, **paddings)
        
        paddings = {'padx': 5, 'pady': 5}
        ttk.Label(self,  text='Select the dimension for ODD_X2:').grid(column=0, row=3, sticky=tk.W, **paddings)
        option_menu = ttk.OptionMenu(
            self,
            self.option_var,
            self.dimension[0],
            *self.dimension,
            command=self.option_changed)
        option_menu.grid(column=1, row=3, sticky=tk.W, **paddings)
        self.output_label = ttk.Label(self, foreground='red')
        self.output_label.grid(column=0, row=4, sticky=tk.W, **paddings)
        
        paddings = {'padx': 5, 'pady': 5}
        ttk.Label(self,  text='Select the dimension for ODD_Y2:').grid(column=3, row=3, sticky=tk.W, **paddings)
        option_menu = ttk.OptionMenu(
            self,
            self.option_var,
            self.dimension[0],
            *self.dimension,
            command=self.option_changed)
        option_menu.grid(column=4, row=3, sticky=tk.W, **paddings)
        self.output_label = ttk.Label(self, foreground='red')
        self.output_label.grid(column=4, row=5, sticky=tk.W, **paddings)
   
 def option_changed(self, *args):
        self.output_label['text'] = f'You selected: {self.option_var.get()}'

class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.geometry("800x400")
        self.title('ABC')
        for r in range(5):
            self.rowconfigure(r, weight=1)
        for c in range(8):
            self.columnconfigure(c, weight=1)
        
        self.testFrame1 = TestFrame()
        self.testFrame1.grid(row=0, column=0, rowspan=3, columnspan=3, sticky='nsew')
App().mainloop()

问题:您所有的选项菜单都有相同的变量self.option_menu 当您 select 任何选项时,它会更新变量。 因此,最好的选择是更改变量。

import tkinter as tk
from tkinter import ttk

class TestFrame(tk.Frame):
    def __init__(self):
        super().__init__()
        self.dimension =('106','108','110','112','114','126','128','130','132','134','136','138','140','146','148','150','152','154','360','380','400','420','440','500', '520', '540',
                        '560', '580', '600','780','800','820')
        self.option_var = tk.IntVar(self)
        self.option_var1 = tk.IntVar(self)
        self.option_var2 = tk.IntVar(self)
        self.option_var3 = tk.IntVar(self)
        #self.create_widgets()
        #self.create_widgets_1()
        
        paddings = {'padx': 5, 'pady': 5}
        label = ttk.Label(self,  text='Select the dimension for ODD_X1:').grid(column=0, row=0, sticky=tk.W, **paddings)
        #ODD_X1
        option_menu = ttk.OptionMenu(
            self,
            self.option_var,
            self.dimension[0],
            *self.dimension,
            command=self.option_changed)
        option_menu.grid(column=1, row=0, sticky=tk.W, **paddings)
        self.output_label = ttk.Label(self, foreground='red')
        self.output_label.grid(column=0, row=1, sticky=tk.W, **paddings)
        
        paddings = {'padx': 5, 'pady': 5}
        ttk.Label(self,  text='Select the dimension for ODD_Y1:').grid(column=3, row=0, sticky=tk.W, **paddings)
        option_menu = ttk.OptionMenu(
            self,
            self.option_var1,
            self.dimension[0],
            *self.dimension,
            command=self.option_changed1)
        option_menu.grid(column=4, row=0, sticky=tk.W, **paddings)
        self.output_label1 = ttk.Label(self, foreground='red')
        self.output_label1.grid(column=4, row=1, sticky=tk.W, **paddings)
        
        paddings = {'padx': 5, 'pady': 5}
        ttk.Label(self,  text='Select the dimension for ODD_X2:').grid(column=0, row=3, sticky=tk.W, **paddings)
        option_menu = ttk.OptionMenu(
            self,
            self.option_var2,
            self.dimension[0],
            *self.dimension,
            command=self.option_changed2)
        option_menu.grid(column=1, row=3, sticky=tk.W, **paddings)
        self.output_label2 = ttk.Label(self, foreground='red')
        self.output_label2.grid(column=0, row=4, sticky=tk.W, **paddings)
        
        paddings = {'padx': 5, 'pady': 5}
        ttk.Label(self,  text='Select the dimension for ODD_Y2:').grid(column=3, row=3, sticky=tk.W, **paddings)
        option_menu = ttk.OptionMenu(
            self,
            self.option_var3,
            self.dimension[0],
            *self.dimension,
            command=self.option_changed3)
        option_menu.grid(column=4, row=3, sticky=tk.W, **paddings)
        self.output_label3 = ttk.Label(self, foreground='red')
        self.output_label3.grid(column=4, row=4, sticky=tk.W, **paddings)
   
    def option_changed(self, *args):
        self.output_label['text'] = f'You selected: {self.option_var.get()}'
    def option_changed1(self, *args):
        self.output_label1['text'] = f'You selected: {self.option_var1.get()}'
    def option_changed2(self, *args):
        self.output_label2['text'] = f'You selected: {self.option_var2.get()}'
    def option_changed3(self, *args):
        self.output_label3['text'] = f'You selected: {self.option_var3.get()}'

class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.geometry("800x400")
        self.title('ABC')
        for r in range(5):
            self.rowconfigure(r, weight=1)
        for c in range(8):
            self.columnconfigure(c, weight=1)
        
        self.testFrame1 = TestFrame()
        self.testFrame1.grid(row=0, column=0, rowspan=3, columnspan=3, sticky='nsew')
App().mainloop()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM