【问题标题】:Change the size of the GUI window tkinter更改 GUI 窗口 tkinter 的大小
【发布时间】:2017-02-21 13:01:34
【问题描述】:

我尝试更改此 GUI 的窗口大小,但我很挣扎。我尝试使用 root.geometry("1080x800+200+200") 但这似乎也不起作用。有人可以解释为什么吗?我目前只是在练习使用 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()

【问题讨论】:

  • root.geometry 不好用是什么意思?
  • 我尝试使用 root.geometry 但它并没有使窗口变大,它只是创建了一个我想要大小的新窗口。
  • root.geometry 更改 tkinter 窗口大小。你的意思是python控制台没有改变吗?
  • 您发布的代码中没有名为root 的窗口。您的根窗口名为app。所以你应该打电话给app.geometry("1080x800+200+200")。顺便说一句,你应该修复你的缩进。
  • 啊是的@PM2Ring 我没有注意到这一点,因为我一看到root,geometry 效果不佳就发表了评论,我没有看代码:D

标签: python user-interface tkinter


【解决方案1】:

您的程序中没有声明根,因此您将无法调用root.geometry。如果您将代码更改为这样的代码,那么您将能够调用 root.geometry 并更改 GUI 窗口的大小,也可以使用 root 将其作为参数传递给您的其他页面类并设置不同的如果您愿意,可以为它们提供所有尺寸。

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

【讨论】:

  • 我太傻了,我是从另一个程序中使用它的 :) 它现在可以工作了,但我没有做你所做的事情,而是做了if __name__ == "__main__": app = SampleApp() app.geometry("1080x800+200+200") app.mainloop()
  • 在本例中,您确实不想要创建根目录。 SampleApp 子类Tk,所以你只需要在app 上调用geometry。
【解决方案2】:

在第一类 SampleApp 中,您可以使用 self.geometry('500x555') #for example。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多