2017-02-21 25 views
1

Ich habe versucht, die Fenstergröße für diese GUI zu ändern, aber ich habe Probleme. Ich habe versucht, root.geometry ("1080x800 + 200 + 200") zu verwenden, aber das scheint nicht so gut zu funktionieren. Kann jemand erklären warum? Ich übe gerade mit tkinter. DankÄndern Sie die Größe des GUI-Fensters tkinter

import tkinter as tk # python3 
TITLE_FONT = ("Helvetica", 18, "bold") 

class SampleApp(tk.Tk): 

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

     # the container is where we'll stack a bunch of frames 
     # on top of each other, then the one we want visible 
     # will be raised above the others 
     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 = {} 
     for F in (StartPage, PageOne, PageTwo): 
      page_name = F.__name__ 
      frame = F(parent=container, controller=self) 
      self.frames[page_name] = frame 

      # put all of the pages in the same location; 
      # the one on the top of the stacking order 
      # will be the one that is visible. 
      frame.grid(row=0, column=0, sticky="nsew") 

     self.show_frame("StartPage") 

    def show_frame(self, page_name): 
     '''Show a frame for the given page name''' 
     frame = self.frames[page_name] 
     frame.tkraise() 


class StartPage(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     self.controller = controller 
     label = tk.Label(self, text="This is the start page", font=TITLE_FONT) 
     label.pack(side="top", fill="x", pady=10) 

     button1 = tk.Button(self, text="Go to Page One", 
          command=lambda: controller.show_frame("PageOne")) 
     button2 = tk.Button(self, text="Go to Page Two", 
          command=lambda: controller.show_frame("PageTwo")) 
     button1.pack() 
     button2.pack() 


class PageOne(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     self.controller = controller 
     label = tk.Label(self, text="This is page 1", font=TITLE_FONT) 
     label.pack(side="top", fill="x", pady=10) 
     button = tk.Button(self, text="Go to the start page", 
          command=lambda: controller.show_frame("StartPage")) 
     button.pack() 


class PageTwo(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     self.controller = controller 
     label = tk.Label(self, text="This is page 2", font=TITLE_FONT) 
     label.pack(side="top", fill="x", pady=10) 
     button = tk.Button(self, text="Go to the start page", 
          command=lambda: controller.show_frame("StartPage")) 
     button.pack() 


if __name__ == "__main__": 
    app = SampleApp() 
    app.mainloop() 
+0

was meinst du mit 'root.geometry' funktioniert nicht gut? – WhatsThePoint

+0

Ich habe versucht, root.geometry zu verwenden, aber es hat das Fenster nicht größer gemacht, es hat nur ein neues Fenster in der von mir gewünschten Größe erstellt. – saalahdin

+0

'root.geometry' ändert die Größe des tkinter-Fensters. Meinst du, die Python-Konsole ändert sich nicht? – WhatsThePoint

Antwort

3

Sie haben noch eine Wurzel in Ihrem Programm deklariert, so dass Sie nicht in der Lage sein werden, root.geometry zu nennen. Wenn Sie Ihren Code so ändern, können Sie root.geometry aufrufen und die Größe Ihres GUI-Fensters ändern, auch indem Sie root als Parameter an Ihre anderen Seitenklassen übergeben und für alle unterschiedliche Größen festlegen können wenn Sie wünschen.

if __name__ == "__main__": 
    root = tk.Tk() 
    root.geometry("1080x800+200+200") 
    app = SampleApp(root) 
    root.mainloop() 
+0

ich bin so dumm, ich benutzte das von einem anderen Programm :) Es funktioniert jetzt aber anstatt zu tun, was du getan hast, habe ich gerade getan ' if __name__ == "__main__": app = SampleApp() app.geometry ("1080x800 + 200 + 200") app.mainloop() ' – saalahdin

+0

In diesem Beispiel möchten Sie _not_ nicht root erstellen. 'SampleApp' Subklassen' Tk', so dass Sie nur 'geometry' in' app' aufrufen müssen. –

0

In der ersten Klasse SampleApp können Sie einfach self.geometry('500x555') #for example verwenden.

Verwandte Themen