2

我是编程和 python 的新手,所以我提前感谢您的耐心等待。

我创建了一个类,它创建一个带有测试图像的新窗口作为它的背景(“test1.gif”)。

我还在同一类中创建了一个下拉菜单,可让您在 3 个国家/地区之间进行选择。

我可以注释掉制作背景的代码或制作菜单的代码,另一个将显示。但是我希望菜单出现在背景之上。当我运行完整的代码时,我只看到背景。

我很感激我可能在这里遗漏了一些非常明显的东西,如果有人可以指出那是什么。

谢谢你的时间。担

from Tkinter import *
import Tkinter as tk



class dropDown():

    def __init__(self, master):


        #background set_up
        image1 = tk.PhotoImage(file="test1.gif")
        w = image1.width()
        h = image1.height()
        root.geometry("%dx%d+0+0" % (w, h))
        panel1 = tk.Label(root, image=image1)
        panel1.pack(side='top', fill='both', expand='yes')

        # save the panel's image from 'garbage collection'
        panel1.image = image1


        #Drop down menu
        self.var = StringVar(master)
        self.var.set('Alaska') # initial value

        #Have not used countries list just pasted
        self.option = OptionMenu(master, self.var, 'Alberta', 'Australia')
        self.option.pack()



root = Tk()
root.title('drop down test')
dropDown(root)
mainloop()
4

1 回答 1

2

(我认为)您的问题是您将根窗口的大小限制为图像的大小(而不是 sizeof(image)+sizeof(menu))。这解决了我在 OS-X 上的问题。

import Tkinter as tk

class dropDown():
    def __init__(self, master):

        #background set_up
        image1 = tk.PhotoImage(file="test.gif")
        w = image1.width()
        h = image1.height()
        panel1 = tk.Label(root, image=image1)
        panel1.pack(side='top', fill='both', expand='yes')

        # save the panel's image from 'garbage collection'
        panel1.image = image1

        #Drop down menu
        self.var = tk.StringVar(master)
        self.var.set('Alaska') # initial value

        #Have not used countries list just pasted
        self.option = tk.OptionMenu(master, self.var, 'Alaska','Alberta', 'Australia')
        self.option.pack()

        geomstr="%dx%d+0+0" % (w, panel1.winfo_reqheight()+self.option.winfo_reqheight())
        root.geometry(geomstr)

root = tk.Tk()
root.title('drop down test')
dropDown(root)
root.mainloop()

附带说明,让您的 dropDown 从 Frame 继承然后调整 Frame 的大小非常容易(尽管可能没有必要)。然后,您可以将此小部件移动到 GUI 上任何您想要的位置。

编辑

子类框架:

import Tkinter as tk

class dropDown(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self,master)

        #background set_up
        image1 = tk.PhotoImage(file="test.gif")
        panel1 = tk.Label(root, image=image1)
        panel1.pack(side='top', fill='both', expand='yes')

        # save the panel's image from 'garbage collection'
        panel1.image = image1

        #Drop down menu
        self.var = tk.StringVar(master)
        self.var.set('Alaska') # initial value

        #Have not used countries list just pasted
        self.option = tk.OptionMenu(master, self.var, 'Alaska','Alberta', 'Australia')
        self.option.pack()


root = tk.Tk()
root.title('drop down test')
d=dropDown(root)
d.pack(side='top',fill='both',expand='yes')
root.mainloop()

请注意,现在 Tkinter/TK 会为您处理所有帧大小调整。:)

于 2012-06-12T13:57:49.937 回答