python,tkinter-帧高度和宽度参数值无效
我正在尝试创建16个按钮,它们将完全占据窗口底部的3/4。但是,帧高度和宽度值似乎没有任何影响。如何获得我想要的行为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))
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的问题。