2017-06-06 19 views
0

私はどのように私のウィンドウにメニューオプションを追加するのか混乱しています...私は明らかにメニューバーを作り、私のコードで見ることができるようにする方法を知っています。しかし、1つのTk.tkウィンドウしかないので、ウィンドウを1つずつ別のものに変更する方法には影響があります。残りのプログラムはそのウィンドウ内で動作します。私は各ウィンドウのタイトルとメニューを変更できるようにしたいと思います。Tkinter、新しいウィンドウのメニューオプションを追加してください

class start(tk.Tk): 

    def __init__(self, *args, **kwargs): 

     tk.Tk.__init__(self, *args, **kwargs) 

     container = tk.Frame(self) 
     container.pack(side="top", fill="both", expand = True) 
     container.grid_rowconfigure(0, weight=1) 
     container.grid_columnconfigure(0, weight=1) 

     self.frames = {} 

     tk.Tk.title(self, "Group Registration") 

     menubar = tk.Menu(container) 
     tk.Tk.config(self, menu=menubar) 
     fileMenu = tk.Menu(menubar, tearoff=0) 
     menubar.add_cascade(label="File", menu=fileMenu) 
     fileMenu.add_command(label="Exit", command=quit) 

     for F in (begin, admin_main, members): 

      frame = F(container, self) 

      self.frames[F] = frame 

      frame.grid(row=0, column=0, sticky="nsew") 

     self.show_frame(begin) 

    def show_frame(self, cont): 

     frame = self.frames[cont] 
     frame.tkraise() 
     frame.event_generate("<<showframe>>") 


class begin(tk.Frame): 
    pass 

class admin_main(tk.Frame): 

    def __init__(self, parent, controller): 

     self.bind("<<showframe>>", self.on_show_frame) 

    def on_show_frame(self, event): 

     menubar = Menu(self) 
     fileMenu = Menu(menubar) 
     menubar.add_cascade(label="File", menu=fileMenu) 
     fileMenu.add_command(label="Create member list")#command=) 
     fileMenu.add_command(label="Load member list")#command=) 
     fileMenu.add_command(label="Email")#command=) 
     fileMenu.add_separator() 
     fileMenu.add_command(label="Exit") 

     print"ok" 


class members(tk.Frame): 
    pass 

app = start() 
app.geometry("600x400") 
app.mainloop() 

このクラスは新しいウィンドウです。これは、ウィンドウがどのように動作するかを示すコードの短いバージョンです。

(改訂版) ページが開くと、インタープリタは「ok」と表示されます。それを改訂した構文はありません...しかし、私は新しいメニューバーが現れません。

+0

以下は読んでいますか? https://stackoverflow.com/questions/35029188/how-would-i-make-a-method-which-is-run-every-time-a-frame-is-shown-in-tkinter –

+0

私は今あります笑...私は前にevent_generateを使用していないが、私はグーグルで何を読んでいるから、私はやそのようなものを行うことができます。私は私のメニューに追加するためにそれを使用する方法を理解していない。 event_generate()内にコードを追加するか、例のようにバインドして、def on_show_frame()内にコードを追加します。 – ricky6991

+0

メニューにイベントを追加しません。偶数を使用して、メニューを作成する関数を呼び出します。あなたは、上記のコードでそれをやっているようにメニューを作って、ページを作成するコードではなくページが表示されたときに呼び出される関数でのみ行います。 –

答えて

0

あなたは(...あなたの質問では、コード内のエラーのすべてを除く)に非常に接近している

しかし、あなたはすべてのエラーを修正することができますと仮定して、あなたが不足している唯一の作品は実際にあります作成したメニューバーを使用するようにメインウィンドウを設定します。

ウィンドウをメニューバーについて伝えるには、いくつかの行を追加する必要があります。ウィンドウを開くには、winfo_toplevel()を呼び出してから、そのウィジェットがメニューを持つように設定することができます。

def on_show_frame(self, event): 
    menubar = tk.Menu(...) 
    ... 
    top = self.winfo_toplevel() 
    top.configure(menu=menubar) 
+0

素晴らしい、これは素晴らしい仕事...私はwinfo_toplevel()を検索し、それが何を伴うか見るつもりです。私は行くようにトンを学んでいます。私はtk.configureをやろうとしましたが、それ以前にはうまくいきませんでした。また、私の質問のコードは、私のクラスをどのようにセットアップするか、私の実際のコードは完全に機能しているかの例を示すことに過ぎませんでした。ありがとう、私に忍耐強く! – ricky6991

関連する問題