2017-10-22 22 views
1

私はtkinterを使ってGUIを使っています。 メインメニューがあり、このメニューには3つのボタンがあります。私はボタン3をクリックして新しいウィンドウを開きたいと思います。私のコードでは、今、私はほとんど何をしたいのですか。しかし、あなたが見ることができるように私はボタン3に2番目のものに行くためにメインのルートを破壊するコマンドを追加しました。 しかし、これは問題を引き起こします:例えば、私はメインメニューを閉じるには2番目のルートを自動的に開きます。私は創造的であることを試してみました。なぜなら、私は別の方法を見つけて、別の背景イメージで新しいウィンドウを開くことができなかったからです。 人生を楽にするために使用できるアイデア、トリック、機能はありますか? mycode:2つではなく1つのウィンドウを開くPythonのtkinter

from tkinter import * 
from tkinter.messagebox import showinfo 


def clicked1(): 
    bericht = 'Deze functie is uitgeschakeld.' 
    showinfo(title='popup', message=bericht) 

root = Tk() 

def quit(): 
    root.destroy() 

a = root.wm_attributes('-fullscreen', 1) 
#full screen 


#w, h = root.winfo_screenwidth(), root.winfo_screenheight() 
#root.geometry("%dx%d+0+0" % (w, h)) 


#Hoofdmenu achtergrond 
C = Canvas(root, bg="blue", height=250, width=300) 
filename = PhotoImage(file="C:\\Users\\Downloads\\test1.png") 
background_label = Label(root, image=filename) 
background_label.place(x=0, y=0, relwidth=1, relheight=1) 
C.pack() 


# Geen OV-chipkaart button 
b=Button(master=root, command=clicked1) 
photo=PhotoImage(file="C:\\Users\\Downloads\\button1.png") 
b.config(image=photo,width="136",height="53", background='black') 
b.place(x=310, y=340) 

#exit button 
exitbut = PhotoImage(file = "C:\\Users\\Downloads\\exit1.png") 
starter = Label(image = exitbut) 
starter.pack() 

start = Label(image = exitbut) 
start.place(x=900, y=140) 

#Buitenland button 
b2=Button(master=root, command=clicked1) 
photo1=PhotoImage(file="C:\\Users\\Downloads\\button2.png") 
b2.config(image=photo1,width="136",height="53", background='black') 
b2.place(x=490, y=340) 

#Reis informatie 
b3=Button(master=root, command=quit) 
photo2=PhotoImage(file="C:\\Users\\Downloads\\button3.png") 
b3.config(image=photo2,width="136",height="53", background='black') 
b3.place(x=680, y=340) 


root.mainloop() 


#2e window------------------------------------------------------------- 
root2 = Tk() 

#full screen 
a = root2.wm_attributes('-fullscreen', 1) 

#achtergrond 
D = Canvas(root2, bg="blue", height=250, width=300) 
filename = PhotoImage(file = "C:\\Users\\Downloads\\leeg.png") 
background_label = Label(root2, image=filename) 
background_label.place(x=0, y=0, relwidth=1, relheight=1) 
D.pack() 

# Geen OV-chipkaart button 
c1=Button(master=root2, command=clicked1) 
photo3=PhotoImage(file="C:\\Users\\Downloads\\mijnlocatie.png") 
c1.config(image=photo3,width="136",height="53", background='black') 
c1.place(x=210, y=70) 

# Geen OV-chipkaart button 
c2=Button(master=root2, command=clicked1) 
photo4=PhotoImage(file="C:\\Users\\Downloads\\overigelocaties.png") 
c2.config(image=photo4,width="136",height="53", background='black') 
c2.place(x=210, y=140) 


root2.mainloop() 

答えて

0

あなたは本当に2つのTkのインスタンスを持つべきではありません。 tkinterはそのように動作するようには設計されていません。あなたのルートの上に別のウィンドウが必要な場合は、Toplevelを使います。また、OOPのアプローチに固執し、ウィンドウを別のクラスにしておくことをお勧めします。たとえば:

import tkinter as tk 

class App(tk.Tk): 

    def __init__(self): 
     super().__init__() 
     self.create_widgets() 

    def create_widgets(self): 
     """ 
     Instantiating all root window widgets 
     """ 
     tk.Button(self, text='Open another window', command=self.open_dialog).pack() 

    def open_dialog(self): 
     d = Dialog(self) 
     d.wait_window() 

class Dialog(tk.Toplevel): 

    def __init__(self, parent): 
     super().__init__(parent) 
     self.create_widgets() 

    def create_widgets(self): 
     """ 
     Instantiating all toplevel window widgets 
     """ 
     tk.Label(self, text='Welcome to another window!').pack(padx=20, pady=50) 

if __name__ == '__main__': 
    app = App() 
    app.mainloop() 
0

これはToplevelを使用しての代わりに、2つのTkインスタンスを呼び出すことによって、あなたのための問題を解決します。このようにすれば、フルスクリーンの属性と画像を追加できます。 Toplevelはルートウィンドウにスレーブウィンドウを意味するので、ルートウィンドウを閉じると、Toplevelウィンドウを閉じます。私はあなたのquit機能をquit_windowに変更しました。root.quit()も窓を閉じることができます。

from tkinter import * 


def slave1(): 
    tp = Toplevel() 
    tp.geometry("400x400") 
    b = Button(tp, text="button") # you can add you image to it using photoimage 
    b.place(x=200, y=200) 


def quit_root(): 
    root.destroy() 



root = Tk() 
root.geometry("500x500") 

button1 = Button(root, text="button one", command=slave1) 
button2 = Button(root, text="button two") 
button3 = Button(root, text="button three", command=quit_root) 

button1.place(x=210, y=340) 
button2.place(x=340, y=370) 
button3.place(x=370, y=420) 

root.mainloop() 
関連する問題