2017-02-01 7 views
0

私はプログラミングが初めてで、PythonでTkinterパッケージを使用してメニューを作成しようとしています。しかし、IDLEでスクリプトを実行するたびに、表示されるのはすべて最上位(ルート)ウィンドウです。ここでPython Tkinterメニューの作成が機能しない

は私のスクリプトです:

from tkinter import * 
from tkinter import ttk 

root.option_add('*tearOff', False) 

menubar1 = Menu(root) 
root.configure(menu = menubar1) 
file = Menu(menubar1) 
edit = Menu(menubar1) 
help_ = Menu(menubar1) 
tools = Menu(menubar1) 
other = Menu(menubar1) 

menubar1.add_cascade(menu = file, label = 'File') 
menubar1.add_cascade(menu = edit, label = 'Edit') 
menubar1.add_cascade(menu = help_, label = 'Help') 
menubar1.add_cascade(menu = tools, label = 'Tools') 
menubar1.add_cascade(menu = other, label = 'Other') 

任意のアイデアなぜですか?

ありがとうございます。

+3

投稿したコードは実行されません。 'tkinter.Tk'インスタンス(おそらく' root'に保存されています)と 'root.mainloop'が存在しないためです。私がそれらの部分を追加すると、それは私のためにうまく表示されます。 – TidB

+0

答えが小さすぎるので、定義された答えを得るだけでも、ちょっとしたコメント – WhatsThePoint

+0

IDLEなしで実行しようとしましたか? IDLEは 'tkinter'で作成されました。時には競合することもあります。しかし、IDLEはコードを開発するためのツールであり、コードが準備できたらIDLEを使って実行することはありません。 – furas

答えて

1

コメントが指摘したように、それはあなたのコードがすべてで働いていたことは驚くべきことだ:あなたはそれがNameError: name 'root' is not definedがトリガされますので、それにoption_addを使用しようとする前に、ルートが定義されていません。

ただし、定義するとになります。誰かが既にこのソリューションにコメントしています。 tkinter.Tkインスタンスは、最初にウィンドウを作成するためにルートを定義する方法です。 mainloop()は、そのウィンドウを維持するために行う操作です。

from tkinter import * 
import tkinter as tk # you could just say 'import tkinter', but 'tk' is easier to type 

root = tk.Tk() # or, as @TidB mentioned, tkinter.Tk() if you're importing it as it is 

root.option_add('*tearOff', False) 
# insert all your code.... 
# and so on... 
menubar1.add_cascade(menu = other, label = 'Other') 

root.mainloop() # keeps the window up 

基本的には、mainloop()とTk()を追加するだけです。

また、from tkinter import *は自然にすべてをインポートするため、ほとんどの場合、ほとんど確実にfrom tkinter import ttk(2行目のコード)は必要ありません。

関連する問題