如果选择OptionMenu中的选项,如何使Tkinter按钮不消失?

时间:2014-06-27 12:28:29

标签: python tkinter

我有这段代码:

def type():
    variable=var.get()
    if variable=="Text with caps":
        import caps_main.py


from Tkinter import *
t = Tk()
t.geometry("500x300")
p = PhotoImage(file="C:\Users\Indrek\Downloads\Desert.gif")
l = Label(t, image=p)
t.wm_title("School Test")

var = StringVar(l)
var.set("Select test type.") # initial value

option = OptionMenu(l, var, "Text with caps", "Text with mistakes")
option.pack(expand=Y)


b = Button(l, text="Start", command = lambda:type())
b.configure(background='PeachPuff')
b.pack(expand=Y)

l.pack_propagate(0)
l.pack()

t.mainloop()

问题是,当我运行代码并从optionmenu中选择一个选项时,按钮"开始"消失。如何让按钮不消失?

当我将代码更改为:(小部件在主框架(t)中而不在此代码中的标签(l)中)

def type():
    variable=var.get()
    if variable=="Text with caps":
        import caps_main.py


from Tkinter import *
t = Tk()
t.geometry("500x300")
p = PhotoImage(file="C:\Users\Indrek\Downloads\Desert.gif")
l = Label(t, image=p)
t.wm_title("School Test")

var = StringVar(t)
var.set("Select test type.") # initial value

option = OptionMenu(t, var, "Text with caps", "Text with mistakes")
option.pack(expand=Y)


b = Button(t, text="Start", command = lambda:type())
b.configure(background='PeachPuff')
b.pack(expand=Y)

l.pack_propagate(0)
l.pack()

t.mainloop()

然后一切正常,但我不希望按钮有这样的背景固体条纹。我只想在背景图片上按下按钮。

1 个答案:

答案 0 :(得分:0)

在您的代码中有一些看起来很可疑的东西。首先,在标签中关闭包传播。这意味着标签不会根据标签内的小部件调整大小。因此,如果您的标签很小,它将隐藏您在标签中包装的菜单。我的猜测是,这就是发生的事情。在不知道图像大小的情况下,我无法肯定地说出来。

第二个问题是,当您在其容器中打包标签时,您不会指定expandfill等选项,因此它不会增长以填充主窗口。< / p>

如果您只是想在整个GUI中使用背景图像,则不必将其添加到标签中,然后将所有小部件添加到标签中。一种更简单的方法是使用place来让你的标签填充主窗口,然后正常打包或网格化主窗口中的所有其他小部件。这是place略好于gridpack的一种情况。