当前位置: 首页 > 知识库问答 >
问题:

Tkinter/Python-在调整窗口大小时禁用按钮的大小调整

宗政斌
2023-03-14

我有一个窗口与列表框,调整大小与彼此。我用网格来做这个。列表框下面有一排按钮,它们当前正在随着窗口移动和调整大小。我希望按钮保持原位,并在窗口和列表框调整大小时保持一致的大小(所以按钮总是保持在列表框的左下角)。

有简单的方法吗?我今天才开始使用Tkinter,所以我可能只是在文档中错过了它,或者可能只是在网格布局上感到困惑。

按钮设置如下:

nextbutton = Button(self, width = 30, height = 30, image = ffbtn)
nextbutton.image = ffbtn
nextbutton.bind("<Button-1>", self.forward)
nextbutton.grid(row = 10, column=4, sticky='w')

我已经尝试了所有粘性组合,但那些不调整按钮大小的组合仍然允许它们四处移动,这是我不想要的。

编辑:这是一个非常基本的例子,我所说的,根据要求。调整窗口大小时,按钮彼此分开移动。我不想那样。

顺便说一下,我是否需要在最后设置所有这些网格配置来设置权重,即使我使用它的一列或一行,而列/行跨度占据了所有空间?

import tkinter
from tkinter import *
from tkinter import ttk

class Application(tkinter.Tk):
    def __init__(self, parent):
        tkinter.Tk.__init__(self, parent)
        self.minsize(300,300)
        self.parent = parent
        self.main()

    def main(self):

        self.grid()

        listbox = tkinter.Listbox(self, width=20, height=25, bg = 'grey')
        listbox.grid(padx=30, pady=30, columnspan=11,  sticky='NEW')

        bt1 = Button(self, width = 5, height = 5)
        bt1.grid(row=10, column=0, padx=(30,0), sticky='w')

        bt2 = Button(self, width = 5, height = 5)
        bt2.grid(row = 10, column=1, sticky='w')

        bt3 = Button(self, width = 5, height = 5)
        bt3.grid(row = 10, column=2, sticky='w')

        bt4 = Button(self, width = 5, height = 5) 
        bt4.grid(row = 10, column=3, sticky='w')

        bt5 = Button(self, width = 5, height = 5)
        bt5.grid(row = 10, column=4, sticky='w')

        self.grid_columnconfigure(0,weight=1)
        self.grid_columnconfigure(1,weight=1)
        self.grid_columnconfigure(2,weight=1)
        self.grid_columnconfigure(3,weight=1)
        self.grid_columnconfigure(4,weight=1)
        self.grid_columnconfigure(5,weight=1)
        self.grid_columnconfigure(6,weight=1)
        self.grid_columnconfigure(7,weight=1)
        self.grid_columnconfigure(8,weight=1)
        self.grid_columnconfigure(9,weight=1)
        self.grid_columnconfigure(10,weight=1)      
        self.grid_rowconfigure(0,weight=1)
        self.grid_rowconfigure(1,weight=1)
        self.grid_rowconfigure(2,weight=1)
        self.grid_rowconfigure(3,weight=1)
        self.grid_rowconfigure(4,weight=1)
        self.grid_rowconfigure(5,weight=1)
        self.grid_rowconfigure(6,weight=1)
        self.grid_rowconfigure(7,weight=1)
        self.grid_rowconfigure(8,weight=1)
        self.grid_rowconfigure(9,weight=1)
        self.grid_rowconfigure(10,weight=1)

app = Application(None)
app.mainloop()

共有1个答案

顾淳
2023-03-14

通过给网格中的所有行和列赋予非零权重,您可以显式地使它们随主窗口调整大小。

由于您只希望调整列表框的大小,因此仅为包含列表框的行和列之一指定非零权重:

def main(self):
    ...
    # The default weight of all rows/columns is 0. Only modify it for row 0 and column 10
    self.grid_rowconfigure(0, weight=1)
    self.grid_columnconfigure(10, weight=1)

有关更多信息,请查看包装、网格和放置方法的文档。

 类似资料:
  • 在tkinter中调整窗口大小时,有没有办法动态调整小部件的大小? 这是代码: 当我调整窗口大小时,窗口小部件的宽度和高度保持不变。 我想要的是根据窗口的大小动态调整窗口小部件的大小。 有没有办法在tkinter中实现这一点? 如果有人能帮我,那就太好了。

  • 我正在尝试构建一个包含6个窗格(作为父级添加到GridPane布局中)的简单Java项目。我必须在开始时设置窗口大小,并通过参考根布局的宽度和高度,设法将它们均匀地拆分。 但我想要他们调整大小,因为我改变了窗口的大小(使用鼠标,现在他们得到固定的大小)。 下面是我的代码:

  • 窗口大小,我们可以非常方便的使用width、height调整,但是如何知道 width和height是一个问题? 在 Window 操作系统中,假如我们想要缩放,我们通常会把鼠标移动到窗口的右边栏,和底部边栏,以及右下边栏。 而且在不同的边栏,鼠标呈现的样式也是不一样的。当我们在右边栏的时候我们可以通过cursor: e-resize;模拟鼠标样式。 在底部边栏我们可以通过cursor: s-re

  • #include <stdio.h> void fun1(void) { int i = 0; i++; i = i * 2; printf("%d\n", i); } void fun2(void) { int j = 0; fun1(); j++; j = j

  • 问题内容: 我正在用d3.js绘制散点图。借助以下问题: 获取屏幕,当前网页和浏览器窗口的大小 我正在使用此答案: 这样我就可以将图适合用户的窗口,如下所示: 现在,我希望在用户调整窗口大小时可以调整图的大小。 PS:我的代码中没有使用jQuery。 问题答案: 寻找“响应式SVG”,使SVG响应式非常简单,您不必再担心大小。 这是我的做法: 注意: SVG图像中的所有内容都会随窗口宽度缩放。这包

  • 问题内容: 我一直试图(徒劳地)建立一个页面,当我更改窗口大小时,其元素将重新调整大小。我可以在CSS中使用它来处理图像,但是没有问题,但是我似乎无法在文本上完成相同的操作,而且我不确定在CSS中是否有可能。而且我似乎找不到能完成此任务的jQuery脚本。 当用户调整窗口大小时,我实质上希望页面能够动态流畅地缩放,而无需用户调用页面缩放。通过css在我的img div上这可以正常工作,但对于文本则