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 に答える