【问题标题】:Button changes frame size in Tkinter按钮更改 Tkinter 中的帧大小
【发布时间】:2020-04-07 09:05:30
【问题描述】:

我是 Tkinter 新手,在添加小部件时我的框架有问题。在此示例中,我添加了一个按钮,当我使用 .grid() 将按钮放入其中时,该按钮会使我的框架更宽。

如何使框架“固定”?我希望下面代码中的蓝色框在添加按钮时保持相同的宽度。

提前致谢。

问候, 拉弗格


class Window(Frame):

    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.master = master
        master.title("Yatzy - The Game")
        master.geometry("800x600+0+0")
        master.iconbitmap(r'dice.ico')
        master.state('zoomed')

        # Create grid index for the window
        for r in range(20):
            self.master.rowconfigure(r, weight=1)

        for c in range(20):
            self.master.columnconfigure(c, weight=1)


        # Place Frame 1
        Frame1 = Frame(master, bg="blue")
        Frame1.grid(row = 0, column = 0, rowspan = 20, columnspan = 3, sticky=W+E+N+S)

        # Place Frame 2
        Frame2 = Frame(master, bg="green")
        Frame2.grid(row=0, column=3, rowspan=20, columnspan=17, sticky = W+E+N+S)

        # Place Frame 3
        Frame3 = Frame(master, bg="red")
        Frame3.grid(row=5, column=8, rowspan=10, columnspan=7, sticky = W+E+N+S)

        # Place button 1
        btn_1 = Button(master, text="hello123")
        btn_1.grid(row=0, column=0)


root = Tk()
app = Window(master=root)
app.mainloop()

【问题讨论】:

  • 尝试在self.master.columnconfigure(...)中添加uniform=1

标签: python tkinter tkinter-layout


【解决方案1】:

您可以使用grid_propagate(False) 阻止内容影响框架的大小。请参见下面的示例。

其他的;您从Frame 继承,但从不在self 中放入任何内容,而是将所有内容放入self.master 中,即。根。我更改为将所有内容放入self,然后将self 打包在root 中。

我还删除了该图标,因为我没有您的图标文件。

from tkinter import *

class Window(Frame):

    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.master = master
        master.title("Yatzy - The Game")
        master.geometry("800x600+0+0")
        master.state('zoomed')
        self.pack(expand=True, fill='both')

        # Create grid index for the window
        for r in range(20):
            self.rowconfigure(r, weight=1)

        for c in range(20):
            self.columnconfigure(c, weight=1)


        # Place Frame 1
        Frame1 = Frame(self, bg="blue")
        Frame1.grid(row = 0, column = 0, rowspan = 20, columnspan = 3, sticky=W+E+N+S)
        Frame1.grid_propagate(False) # Stop grid() from resizing container

        # Place Frame 2
        Frame2 = Frame(self, bg="green")
        Frame2.grid(row=0, column=3, rowspan=20, columnspan=17, sticky = W+E+N+S)

        # Place Frame 3
        Frame3 = Frame(self, bg="red")
        Frame3.grid(row=5, column=8, rowspan=10, columnspan=7, sticky = W+E+N+S)

        # Place button 1
        btn_1 = Button(Frame1, text="hello123")
        btn_1.grid(row=0, column=0)


root = Tk()
app = Window(master=root)
app.mainloop()

【讨论】:

  • 哇,非常感谢!正是我想要的。我非常感谢你的回答。帮助很大。 /拉弗格
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 2018-09-27
  • 2021-01-29
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
相关资源
最近更新 更多