Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python,tkinter-帧高度和宽度参数值无效_Python_Tkinter - Fatal编程技术网

python,tkinter-帧高度和宽度参数值无效

python,tkinter-帧高度和宽度参数值无效,python,tkinter,Python,Tkinter,我正在尝试创建16个按钮,它们将完全占据窗口底部的3/4。但是,帧高度和宽度值似乎没有任何影响。如何获得我想要的行为 from tkinter import * class Application(object): def __init__(self): # Creating the main window self.window = Tk() self.window.geometry('{}x{}'.format(400, 400))

我正在尝试创建16个按钮,它们将完全占据窗口底部的3/4。但是,帧高度和宽度值似乎没有任何影响。如何获得我想要的行为

from tkinter import *


class Application(object):
    def __init__(self):
        # Creating the main window
        self.window = Tk()
        self.window.geometry('{}x{}'.format(400, 400))

        # frame where numbered buttons will be
        frame = Frame(self.window)
        frame.configure(height=300, width=300)
        frame.pack(side=BOTTOM)

        # add buttons
        for i in range(4):
            for j in range(4):
                Button(frame, text=str(4*i + j + 1)).grid(row=i, column=j, sticky=N+E+S+W)
        self.window.mainloop()


def main():
    app = Application()

main()

您看到这种行为的原因是tkinter小部件被设计为在使用
grid
pack
时收缩或扩展,以完全适合其孩子。99.99%的情况下,这是完全正确的行为,因为它导致GUI响应字体大小、屏幕分辨率和窗口大小的变化

如果您的目标是将屏幕分为两部分,其中一部分占屏幕的1/4,另一部分占屏幕的3/4,那么最好的解决方案是使用
grid
place
,因为这两个部分都可以轻松设置相对大小

我通常不推荐
place
,所以这里有一个使用网格的解决方案。注意
grid.rowconfigure
grid.columnconfigure

from tkinter import *

class Application(object):
    def __init__(self):
        self.window = Tk()
        self.window.geometry('{}x{}'.format(400, 400))

        self.window.grid_rowconfigure(0, weight=1)
        self.window.grid_rowconfigure(1, weight=3)
        self.window.grid_columnconfigure(0, weight=1)

        frame = Frame(self.window, background="pink")
        frame.grid(row=1, column=0, sticky="nsew")

        for row in range(4):
            frame.grid_rowconfigure(row, weight=1)
        for column in range(4):
            frame.grid_columnconfigure(column, weight=1)

        # add buttons
        for i in range(4):
            for j in range(4):
                button = Button(frame, text=str(4*i + j + 1))
                button.grid(row=i, column=j, sticky=N+E+S+W)
        self.window.mainloop()


def main():
    app = Application()

main()

在本例中,根窗口中的第0行(零)可以用于任何您想要的内容。Tkinter将尽最大努力使GUI的该部分始终为窗口的1/4高度。我建议在该行中放置一个框架,然后在该框架中放置任何其他小部件。

将一个参数
master
传递到
\uuuu init\uuuu
,然后将调整大小的行更改为
master.geometry({}x{}.format(400400))
,应该这样做work@WhatsThePoint我真的不明白你的意思。你能详细说明一下吗?因为根本问题是一样的。Tkinter小部件设计用于缩小(或扩展)以适合其孩子。因此,如果您将一个大小应用于一个框架,然后将小部件放在该框架内,那么该框架将收缩以适应。你问什么是错的,答案是没有错——这是Tkinter的默认行为。我建议你重新措辞你的问题,问你真正想要什么。对我来说,这听起来像是你在问为什么UI会这样。如果你不在乎为什么,但实际上想知道如何将主窗口划分为两个部分,其中一个是屏幕的1/4,另一个是3/4,请询问。网格列和行可以配置为具有最小像素大小
frame.grid\u columnconfigure(i,minsize=75)
frame.grid\u rowconfigure(j,minsize=75)
。请您添加一个关于
grid\u rowconfigure
grid\u columnconfigure
的详细说明?
weight
paramater做什么?@SadhuBaba:这些方法和选项在很多地方都有记录。例如和。在使用
grid
时,也有很多关于stackoverflow的问题。