【问题标题】:Hello! I have some problems with tkinter grid alignment and button size你好!我对 tkinter 网格对齐和按钮大小有一些问题
【发布时间】:2018-10-03 12:41:06
【问题描述】:

为什么网格不以窗口大小为中心?现在网格的最大行和列是多少? 另外,为什么按钮不是方形的,因为我将它们的高度和宽度定义为相等? 这是我的代码:

from Tkinter import *

class Application:
    def __init__(self, master=None):
        self.master = master
        self.createWidgets_0()

    def createWidgets_0(self):
        self.but_Next = Button(self.master, text="Next", height = 10, width = 10)
        self.but_Next.grid(row=1, column=2)

        self.but_fil1 = Button(self.master, text="Filler", height = 10, width = 10)
        self.but_fil1.grid(row=1, column=1)

        self.but_fil2 = Button(self.master, text="Filler", height = 10, width = 10)
        self.but_fil2.grid(row=0, column=1)

        self.but_fil3 = Button(self.master, text="Filler", height = 10, width = 10)
        self.but_fil3.grid(row=2, column=1)

        self.but_Close = Button(self.master, text="Close", command=self.master.quit, height = 10, width = 10)
        self.but_Close.grid(row=1, column=0)

root = Tk()
app = Application(root)
app.master.geometry("800x600")
app.master.resizable(0, 0)
root.mainloop()
root.destroy()

this is the output i get of the above code

【问题讨论】:

  • 来自the docs:"你也可以使用height和width选项来显式设置大小。如果你在按钮中显示文本,这些选项在文本中定义按钮的大小单位。” 文本单位不是方形的,所以你的按钮也不是方形的。至于为什么按钮不居中-我想这可能是因为您将它们设置为固定大小,因此它们无法扩展到整个窗口。
  • 我认为最大行数和列数可能是 65535,虽然我不确定。
  • 你在 OSX 上吗? OSX 不允许您拥有超过一行高的按钮,除非您使用图像。多平台支持的缺陷之一。
  • 如果为按钮设置图像,则宽度和高度可以按像素调整,否则宽度和高度由字符高度和长度测量。

标签: python macos button tkinter grid


【解决方案1】:

如果您指定 1x1 图像的图像背景,则可以毫无问题地调整按钮大小。

请记住,如果没有将图像设置为按钮,tkinter 将根据文本大小解释高度和 with。对于图像,它应该以像素为单位解释高度和宽度。

import tkinter as tk

root = tk.Tk()
tk.Frame(root)
my_image = tk.PhotoImage(file="path_to_image/1x1.gif")
tk.Button(text="Button with 1x1 image", image=my_image, compound="left", height=100).grid(row=0, column=0)
root.mainloop()

【讨论】:

    【解决方案2】:

    你还没有告诉 tkinter 如果窗口中有多余的空间该怎么做。你可以通过给行或列一个 weight 来做到这一点,它告诉 tkinter 应该给该行或列多少额外的空间。默认权重为零,这意味着不会为任何行或列提供超出其请求的空间。

    根据经验,您应该始终为至少一行和一列赋予非零权重。通常这将是“英雄”行或列(通常是带有文本小部件、画布或其他大型小部件的行或列)。如果您希望所有小部件居中 - 有点像网页 - 给行和列零以及至少比最后一行和列大一的行和列。如果您希望所有行和列均等扩展以填充窗口,请为具有小部件的每一行和每一列赋予相同的权重。

    要赋予行或列权重,请使用grid_rowconfigure 和grid_columnconfigure。第一个参数是行号或列号,或数字元组。例如,要将所有额外空间分配给第 0 行和第 2 行,您可以这样做:

    self.master.grid_rowconfigure((0,2), weight=1)
    

    【讨论】:

      猜你喜欢
      • 2020-03-11
      • 1970-01-01
      • 2014-04-28
      • 2021-01-12
      • 2022-11-23
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      相关资源
      最近更新 更多