2017-12-13 11 views
0

私はGUIを生成するコードを書いています。コードを実行するたびに、メインのGUIウィンドウと、それに何もない小さなウィンドウが追加されます。小さなウィンドウを閉じると大きなメインウィンドウが消えます。 私は類似の問題を持つ他の投稿を読んできましたが、自分のコードにどこにエラーがあるのか​​を特定できませんでした。Extra TkinterのGUIポップアップ

:)助けてください

は質問をフォローアップ:どのように私は灰色の退屈な色ではなく、背景画像を追加しますか?

これは次のようなものです。 enter image description here

#%% GUI Interface 

import Tkinter as tk 
from tkFont import Font 
from PIL import ImageTk, Image 
from Tkinter import END 

#This creates the main window of an application 
window = tk.Toplevel() 
window.title("Sat Track") 
window.geometry("1200x800") 
window.configure(background='#f0f0f0') 

#Imports the pictures. 
pic1 = "Globeview.png" 
pic2 = "MercatorView.png" 
pic3 = "currentweathercroppedsmall.png" 
pic4 = "GECurrentcroppedsmall.png" 

#Creates a Tkinter-compatible photo image, which can be used everywhere Tkinter expects an image object. 
img1 = ImageTk.PhotoImage(Image.open(pic1)) 
img2 = ImageTk.PhotoImage(Image.open(pic2)) 
img3 = ImageTk.PhotoImage(Image.open(pic3)) 
img4 = ImageTk.PhotoImage(Image.open(pic4)) 

header = tk.Label(window, text="Satellite Control Center", font=Font(size=40)) 
header.pack() 

toprow = tk.Frame(window) 
infobox = tk.Text(toprow, width=50, height=7, font=("Calibri",12)) 
infobox.pack(side = "left") 
infobox.insert(END,"Current information for:"+spacer+name +'\n'+ 
       "Time:" +space+times+ '\n'+ 
       "Longitude:"+space +x_long+ '\n'+ 
       "Latitude:" +space+x_lat+ '\n'+  
       "Altitude:" +space+alt+space+ "[km]"+'\n'+ 
       "Velocity:" +space+vel+space+ "[km/s]" + '\n'+ 
       "Spatial Resolution: "+space +spat+space+ "[Pixels pr. m]" 
       ) 
toprow.pack() 

midrow = tk.Frame(window) 
globeview = tk.Label(midrow, image = img1) 
globeview.pack(side = "left") # the side argument sets this to pack in a row rather than a column 
mercatorview = tk.Label(midrow, image = img2) 
mercatorview.pack(side = "left") 
midrow.pack() # pack the toprow frame into the window 

bottomrow = tk.Frame(window) 
currentweather= tk.Label(bottomrow, image = img3) 
currentweather.pack(side = "left") 
gearth = tk.Label(bottomrow, image = img4) 
gearth.pack(side = "left") 
bottomrow.pack() 

#Start the GUI 
window.mainloop() 

答えて

2

window = tk.Toplevel()からToplevelを削除します。私はpython2 distを利用できません - 私はpython3を使っていますが、私のコードからTopLevelを削除したときには1つのウィンドウしか表示されませんでした。だから、のpython3の方法がある....

import tkinter as tk 

#This creates the main window of an application 
window = tk.Tk() 



#Start the GUI 
window.mainloop() 

私は(あなたがすでに行ったように)唯一の違いは、そのpython2のTkinterのは、実際にTkinterのあることだと思います。

+0

削除すると、モジュールが呼び出し可能ではないというエラーが表示されます。 ええ、私は主に3を使用していますが、このタスクでpython2を使用することを余儀なくされています。py2 imoのtkinterを使用したお尻の巨大な痛みです。 – Kongstad

+0

ええ、それはあなたがそれをどのようにインポートしたからです。あなたが 'tkinterをtkとしてインポートする'をして、 'window = tk.Tk()'を実行すると、それは機能するでしょうか? –

+0

また、インポートで大文字と小文字をより正確に反映できるように、私は自分の答えを編集しました。それが役に立てば幸い! :) –

6

すべてのtkinterアプリケーションでは、ちょうどTkクラスのインスタンスが1つ必要です。あなたのコードでは作成しませんが、 mainloopは自動的に作成されます (後でBryanのコメントを参照してください)、それは後で(簡単に)参照できません。

あなたの海流一度のものに追加Toplevelウィジェットを使用する場合:

root = tk.Tk() 
root.withdraw() # You can go root.iconify(), root.deiconify() later if you 
       # want to make this window visible again at some point. 
# MAIN CODE HERE 
root.mainloop() 

ない場合は、単純に置き換える:

window = tk.Toplevel() 

で:

window = tk.Tk() 

注:また、 IDLEを使用して作業している場合は、独自のが作成されていることに注意してくださいあなたのアプリケーションがスタンドアローンで使用されるときにアプリケーションを必要としないという事実を隠すかもしれないオブジェクト。

+2

ルートウィンドウを作成するのは 'mainloop'ではありません。ウィジェットを初めて作成するときは、ルートウィンドウが存在しない場合は作成されます。 –

+1

ありがとうございました。私は最初のように他の人に信用しました:しかし、あなたはどちらも同じ結論に達しました。ありがとう=) – Kongstad