【问题标题】:Drop down menu's python下拉菜单的python
【发布时间】:2014-06-28 00:11:21
【问题描述】:

您好,我已经启动了一个程序来显示我的学校时间表,这是我目前的代码:

from tkinter import *

master = Tk()
master2 = Tk()
var = StringVar(master)
var2 = StringVar(master2)
var.set("Day") 
var2.set("Week")

option = OptionMenu(master, var, "Monday", "Tuesday", "Wednesday", "Thursday", "Friday")
option2 = OptionMenu(master2, var, "A", "B")
option.pack()
option2.pack()

Week = var2.get()
Day = var.get()
def ok():
    if Day == "Monday" and Week == "A":
        print("You have: \n P.S.E with Mrs Smith \n W.B.Q with Mrs Smith \n Science with Mr Martin \n Media wirh Mr Kelleher \n English with Mrs Jenkins (of mice and men)")
        input("Press enter to close")
    if Day == "Tuesday" and Week == "A":
        print("You have: \n R.M with Mr Arnold/Mr Heywood \n English with Mrs Jenkins \n I.C.T with Mr Davies \n Maths with Mr Tucker \n I.T programing with Mr Arnold ")
        input("Press enter to close")
    if Day == "Wednesday" and Week == "A":
        print("You have: \n English with Mrs Jenkins \n Science with Mr Martin \n Re with Mr Davies \n Media with Mr Kelleher \n R.M with Mr Arnold/Mr Heywood ")
        input("Press enter to close")
    if Day == "Thursday" and Week == "A":
        print("You have: \n Games With Mr Davies \n I.C.T with Mr Davies \n I.T programing with Mr Arnold \n Science with Mr Martin \n Maths with Mr Tucker")
        input("Press enter to close")
    if Day == "Friday" and Week == "A":
        print("You have: \n Maths with Mr Tucker \n English with Mrs Jenkins \n Media with Mr Kelleher \n I.T programing with Mr Arnold \n Science with Dr Burton")
        input("Press enter to close")
    if Day == "Monday" and Week == "B":
        print("You have: \n Science with Dr Burton \n Re with Mr Davies \n Welsh with Mr Kedward \n English with Mrs Jenkins (of mice and men) \n Media with Mr Kelleher")
        input("Press enter to close")
    if Day == "Tuesday" and Week == "B":
        print("You have: \n Maths with Mr Tucker \n R.M with Mr Arnold/Mr Heywood \n I.T programing with Mr Arnold \n I.C.T with Mr Davies \n Science with Dr Burton")
        input("Press enter to close")
    if Day == "Wednesday" and Week == "B":
        print("You have: \n R.M with Mr Arnold/Mr Heywood \n Media with Mr Kelleher \n English with Mrs Jenkins \n Science with Miss Fair \n I.C.T with Mr Davies")
        input("Press enter to close")
    if Day == "Thursday" and Week == "B":
        print("You have: \n Games With Mr Davies \n I.C.T with Mr Davies \n I.T programing with Mr Arnold \n Maths with Mr Tucker \n Science with Miss fair")
        input("Press enter to close")
    if Day == "Friday" and Week == "B":
        print("You have: \n Welsh with Mr Kedward \n Science with Miss Fair \n English With Mrs Jenkins \n Maths with Mr Tucker an R.M with Mr Arnold/Mr Heywood")
        input("Press enter to close")
    else:
        print("Error invalid choice")
        input("Press enter to close")


button = Button(master, text="OK", command=ok)
button2 = Button(master2, text="OK", command=ok)
button.pack()
button2.pack()
mainloop()

我想知道如何在同一个 Tkinter 窗口中显示这两个选项,它也没有将值设置为正确的值,例如:Day does not = Monday 并且 Week does not = A 相反他们 = "day week" 和我想知道如何解决这个谢谢。我也是新手 tkinter

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    这里需要解决三件事。我会按照我找到它们的顺序来做的

    Tk 的多个实例

    master = Tk()
    master2 = Tk() # DON'T DO THIS
    

    永远不要同时运行两个Tk 实例。如果您需要第二个窗口,请使用tkinter.Toplevel。但是,您不需要第二个窗口,所以让我们继续吧。

    更改所有要被master继承的东西

    这包括var2option2button2。事实上,既然我们完全删除了master2,只需删除button2

    按下按钮时更新StringVar

    这就是您的函数未收到正确信息的原因。您只需将DayWeek 分配给var.get()var2.get() 一次,并且您在创建OptionMenus 后立即执行此操作,此时它们仍处于默认值。当您更改 OptionMenu 项目时,DayWeek 永远不会真正更改。而是执行以下操作:

    def ok():
        global var, var2
        Day = var.get()
        Week = var2.get()
        if Day == ...
        ...
    

    后记

    顺便说一句,您的mainloop 呼叫应该是master.mainloop()。您总是从您的Tk 实例运行mainloop,这是您不应拥有多个实例的部分原因!变量命名方案也存在很多不一致之处,我将向您推荐PEP8,因为它有点超出了这个答案的范围。只要知道像 var 这样的变量名是模糊和可怕的,如果像这样大写,DayWeek 应该是类。我还强烈建议您删除“按 Enter 继续”行。你不需要它们。事实上,从用户那里移除您的控制台交互:创建一个 Toplevel 并在其上写一个 Label

    总之,干得好!这是我很长时间以来对 Tkinter 最正确的尝试之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 2019-04-05
      • 1970-01-01
      • 2017-05-18
      相关资源
      最近更新 更多