Tkinter,为什么我的窗口格式化如此?

时间:2017-11-30 12:58:34

标签: python tkinter format

这是我的代码:

import tkinter as tk
from tkinter import *
root = Tk()
root.title("Calculator")
root.geometry("100x200")

text = Text(root, height = 1, width = 10)

text.grid(row = 0, column = 0)


b1 = Button(root, text="1", command= lambda: text.insert(END, str(1)))
b1.grid(row = 1, column = 0)


b2 = Button(root, text="2", command= lambda: text.insert(END, str(2)))
b2.grid(row = 1, column = 1)

b3 = Button(root, text="3", command= lambda: text.insert(END, str(3)))
b3.grid(row = 1, column = 2)

b4 = Button(root, text="4", command= lambda: text.insert(END, str(4)))
b4.grid(row = 1, column = 3)

当我执行代码时,我的格式化全部搞砸了:

是否与我使用.grid()的方式有关?

2 个答案:

答案 0 :(得分:1)

它的显示方式是因为您的几何尺寸很小,无法显示窗口中的所有窗口小部件,并且网格的工作方式类似于Excel工作表中的排列,因此您可以增大或减小行大小或列大小以将其定位到您想要的位置。查看名为2的按钮,增加行和列大小

import tkinter as tk
from tkinter import *


root = Tk()
root.title("Calculator")
root.geometry("200x200")

text = Text(root, height = 1, width = 10)

text.grid(row = 0, column = 0)


b1 = Button(root, text="1", command= lambda: text.insert(END, str(1)))
b1.grid(row = 1, column = 0)


b2 = Button(root, text="2", command= lambda: text.insert(END, str(2)))
b2.grid(row = 2, column = 1)

b3 = Button(root, text="3", command= lambda: text.insert(END, str(3)))
b3.grid(row = 1, column = 2)

b4 = Button(root, text="4", command= lambda: text.insert(END, str(4)))
b4.grid(row = 1, column = 3)

答案 1 :(得分:1)

您的窗口格式是这样的,因为除非进一步配置grid使得窗口小部件对于给定内容具有尽可能少的像素数量,并且它还假设网格中的每个节点占用相同的量该行或列的空间(所有节点中所需的最小值,在示例条目窗口小部件中具有最大的像素要求)。

据我所知,条目小部件默认 20 字符宽度宽,高度为1个字符。

按钮小部件确实需要内部所需的空间量,"1""2""3"等等。

由于20个字符宽于1个字符,因此在1个字符按钮周围有一个空格,以匹配条目小部件宽度。

有一些方法可以防止这种情况,我能想到的是:

text.grid(row = 0, column = 0)更改为text.grid(row = 0, column = 0, columnspan=4),使其不仅跨越1列而是跨越4列,以便与其下的整个按钮匹配。