你好!我在tkinter网格对齐和按钮大小方面遇到了一些问题

时间:2018-04-23 12:51:11

标签: python macos button tkinter grid

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

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

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

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()