我需要返回在 python tkinter 中单击两个菜单选项的选项

问题描述

我正在用 python 制作一个单位转换器,它有 3 个选项菜单,其中一个选项菜单包含您要转换的事物的类型(压力、温度、时间、数据传输、速度、面积、等),选项菜单二和三是按照选项菜单一,如果你在选项菜单中输入要转换某些速度值,菜单二和三将只显示速度值。

当我运行代码并从菜单二和三中选择任何选项时,它会打印我从两个菜单中选择的值,但是当我从菜单一中选择任何选项时,它不再打印我选择的内容

我不知道如何修复它。

代码如下:

GUI 代码

from tkinter import *
import tkinter as tk
from itertools import product
from Converter import *

converter = Converter()

window = Tk()

w = 650
h = 300

w_screen = window.winfo_screenwidth()
h_screen = window.winfo_screenheight()

position_x = (w_screen/2) - (w/2)
position_y = (h_screen/2) - (h/2)

window.geometry(f'{w}x{h}+{int(position_x)}+{int(position_y)}')
window.configure(
    background='gray'
)
window.resizable(False,False)


def change_options_menu(event):
    converter.change_options_menu(
        stringVar_drop_down_1,stringVar_drop_down_2,stringVar_drop_down_3,drop_down_2,drop_down_3)


options_drop_down_1 = [
    'Armazenamento de Dados','Comprimento','Consumo de Combustível','Energia Mecânica','Frequência','Massa','Pressão','Temperatura','Tempo','Transmissão de dados','VeLocidade','Volume','Área','Ângulo'
]
default_drop_down_1 = options_drop_down_1[1]
stringVar_drop_down_1 = StringVar(window)
stringVar_drop_down_1.set(default_drop_down_1)
drop_down_1 = OptionMenu(
    window,stringVar_drop_down_1,*options_drop_down_1,command=change_options_menu
)

drop_down_1['width'] = w
drop_down_1['font'] = 'Arial 20'
drop_down_1['anchor'] = 'w'

options_drop_down_2 = converter.options_comprimento
default_drop_down_2 = options_drop_down_2[1]
stringVar_drop_down_2 = StringVar(window)
stringVar_drop_down_2.set(default_drop_down_2)
drop_down_2 = OptionMenu(
    window,*options_drop_down_2
)

drop_down_2['width'] = 15
drop_down_2['font'] = 'Arial 20'
drop_down_2['anchor'] = 'w'

options_drop_down_3 = converter.options_comprimento
default_drop_down_3 = options_drop_down_3[1]
stringVar_drop_down_3 = StringVar(window)
stringVar_drop_down_3.set(default_drop_down_3)
drop_down_3 = OptionMenu(
    window,*options_drop_down_3
)

drop_down_3['width'] = 15
drop_down_3['font'] = 'Arial 20'
drop_down_3['anchor'] = 'w'


entry = Entry(
    window,width=19,font='Arial 19'
)

label_result = Label(
    window,font='Arial 18',width=19
)

label_equal = Label(
    window,text='=',font='Arial 20',width=5,bg='gray'
)

label_formula = Label(
    window,bg='gray',text='Fórmula: '
)

drop_down_1.pack()
drop_down_2.place(x=7,y=150)
drop_down_3.place(x=375,y=150)
entry.place(x=7,y=110)
label_result.place(x=375,y=110)
label_equal.place(x=283,y=153)
label_formula.place(x=7,y=240)

window.mainloop()

来自 classe 转换器的代码,它是我的应用程序的后端:

import tkinter as tk


class Converter:
    def __init__(self):
        self.options_armazenamento_de_dados = [
            'Bit','Kilobit','Kibibit','Megabit','Megbibit','Gigabit','Gibibit','terabit','Tebibit','Petabit','Pebibit','Byte','Kilobyte','Kibibyte','Megabyte','MebiByte','Gigabyte','Gibibyte','terabyte','Tebibyte','Petabyte','Pebibyte'
        ]

        self.options_comprimento = [
            'quilômetro','Metro','Centímetro','Milímetro','Micrômetro','Nanômetro','Milha','Jarda','Pé','Polegada','Milha náutica'
        ]

        self.options_consumo_de_combustivel = [
            'Milha por galão americano','Milha por galão imperial','quilômetro por litro','Litro por 100 quilômetros'
        ]

        self.options_energia_mecanica = [
            'Joule','quilojoule','Gram calorie','quilocaloria','Watt-hora','quilowatt-hora','Elétron-volt','BTU','therm (US)','Pé-libra força'
        ]

        self.options_frequencia = [
            'Hertz','quilo-hertz','Mega-hertz','Giga-hertz'
        ]

        self.options_massa = [
            'Tonelada','quilograma','Grama','Miligrama','Micrograma','Tonelada de deslocamento','Tonelada curta','Stone','Libra','Onça'
        ]

        self.options_pressao = [
            'Atmosfera padrão','Bar','Pascal','Psi','Torr'
        ]

        self.options_temperatura = [
            'Grau Celsius','Grau Fahrenheit','Kelvin'
        ]

        self.options_tempo = [
            'Nanosegundo','Microssegundo','Milissegundo','Segundo','Minuto','Hora','Dia','Semana','Mês','Ano-calendário','Década','Século'
        ]

        self.options_transmissao_de_dados = [
            'Bit por segundo','quilobit por segundo','quilobyte por segundo','Kibibit por segundo','Megabit por segundo','Megabyte por segundo','Mebibit por segundo','Gigabit por segundo','Gigabyte por segundo','Gibibit por segundo','terabit por segundo','terabyte por segundo','Tebibit por segundo'
        ]

        self.options_veLocidade = [
            'Milha por hora','Pés por segundo','Metro por segundo','quilômetro por hora','Nó'
        ]

        self.options_volume = [
            'galão americano','Quarto líquido americano','Pinta americana','copo','Onça líquida americana','Colher de sopa americana','Colher de chá americana','Metro cúbico','Litro','Mililitro','galão imperial','Quarto imperial','Pinto imperial','Xícara imperial','Onça líquida imperial','Colher de sopa imperial','Colher de chá imperial','Pé cúbico','Polegada cúbica'
        ]

        self.options_area = [
            'quilômetro quadrado','Metro quadrado','Milha quadrada','Jarda quadrada','Pé quadrado','Polegada quadrada','Hectare','Acre'
        ]

        self.options_angulo = [
            'Grado','Grau','Mil angular','Minuto de arco','Radiano','Segundo de arco'
        ]

    def change_options_menu(self,drop_down_3):
        atual_option = stringVar_drop_down_1.get()

        if atual_option == 'Armazenamento de Dados':

            stringVar_drop_down_2.set('Byte')
            drop_down_2['menu'].delete(0,'end')

            stringVar_drop_down_3.set('Byte')
            drop_down_3['menu'].delete(0,'end')

            for option in self.options_armazenamento_de_dados:
                drop_down_2['menu'].add_command(
                    label=option,command=tk._setit(stringVar_drop_down_2,option))
                drop_down_3['menu'].add_command(
                    label=option,command=tk._setit(stringVar_drop_down_3,option))

        elif atual_option == 'Comprimento':

            stringVar_drop_down_2.set('Metro')
            drop_down_2['menu'].delete(0,'end')

            stringVar_drop_down_3.set('Metro')
            drop_down_3['menu'].delete(0,'end')

            for option in self.options_comprimento:
                drop_down_2['menu'].add_command(
                    label=option,option))

        elif atual_option == 'Consumo de Combustível':

            stringVar_drop_down_2.set('quilômetro por litro')
            drop_down_2['menu'].delete(0,'end')

            stringVar_drop_down_3.set('quilômetro por litro')
            drop_down_3['menu'].delete(0,'end')

            for option in self.options_consumo_de_combustivel:
                drop_down_2['menu'].add_command(
                    label=option,option))

        elif atual_option == 'Energia Mecânica':

            stringVar_drop_down_2.set('Joule')
            drop_down_2['menu'].delete(0,'end')

            stringVar_drop_down_3.set('Joule')
            drop_down_3['menu'].delete(0,'end')

            for option in self.options_energia_mecanica:
                drop_down_2['menu'].add_command(
                    label=option,option))

        elif atual_option == 'Frequência'[4]:

            stringVar_drop_down_2.set('Hertz')
            drop_down_2['menu'].delete(0,'end')

            stringVar_drop_down_3.set('Hertz')
            drop_down_3['menu'].delete(0,'end')

            for option in self.options_frequencia:
                drop_down_2['menu'].add_command(
                    label=option,option))

        elif atual_option == 'Massa':

            stringVar_drop_down_2.set('quilograma')
            drop_down_2['menu'].delete(0,'end')

            stringVar_drop_down_3.set('quilograma')
            drop_down_3['menu'].delete(0,'end')

            for option in self.options_massa:
                drop_down_2['menu'].add_command(
                    label=option,option))

        elif atual_option == 'Pressão':

            stringVar_drop_down_2.set('Pascal')
            drop_down_2['menu'].delete(0,'end')

            stringVar_drop_down_3.set('Pascal')
            drop_down_3['menu'].delete(0,'end')

            for option in self.options_pressao:
                drop_down_2['menu'].add_command(
                    label=option,option))

        elif atual_option == 'Temperatura':

            stringVar_drop_down_2.set('Grau Celsius')
            drop_down_2['menu'].delete(0,'end')

            stringVar_drop_down_3.set('Grau Celsius')
            drop_down_3['menu'].delete(0,'end')

            for option in self.options_temperatura:
                drop_down_2['menu'].add_command(
                    label=option,option))

        elif atual_option == 'Tempo':

            stringVar_drop_down_2.set('Segundo')
            drop_down_2['menu'].delete(0,'end')

            stringVar_drop_down_3.set('Segundo')
            drop_down_3['menu'].delete(0,'end')

            for option in self.options_tempo:
                drop_down_2['menu'].add_command(
                    label=option,option))

        elif atual_option == 'Transmissão de dados':

            stringVar_drop_down_2.set('Bit por segundo')
            drop_down_2['menu'].delete(0,'end')

            stringVar_drop_down_3.set('Bit por segundo')
            drop_down_3['menu'].delete(0,'end')

            for option in self.options_transmissao_de_dados:
                drop_down_2['menu'].add_command(
                    label=option,option))

        elif atual_option == 'VeLocidade':

            stringVar_drop_down_2.set('Metro por segundo')
            drop_down_2['menu'].delete(0,'end')

            stringVar_drop_down_3.set('Metro por segundo')
            drop_down_3['menu'].delete(0,'end')

            for option in self.options_veLocidade:
                drop_down_2['menu'].add_command(
                    label=option,option))

        elif atual_option == 'Volume':

            stringVar_drop_down_2.set('Litro')
            drop_down_2['menu'].delete(0,'end')

            stringVar_drop_down_3.set('Litro')
            drop_down_3['menu'].delete(0,'end')

            for option in self.options_volume:
                drop_down_2['menu'].add_command(
                    label=option,option))

        elif atual_option == 'Área':

            stringVar_drop_down_2.set('Metro quadrado')
            drop_down_2['menu'].delete(0,'end')

            stringVar_drop_down_3.set('Metro quadrado')
            drop_down_3['menu'].delete(0,'end')

            for option in self.options_area:
                drop_down_2['menu'].add_command(
                    label=option,option))

        elif atual_option == 'Ângulo':

            stringVar_drop_down_2.set('Grau')
            drop_down_2['menu'].delete(0,'end')

            stringVar_drop_down_3.set('Grau')
            drop_down_3['menu'].delete(0,'end')

            for option in self.options_angulo:
                drop_down_2['menu'].add_command(
                    label=option,option))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...