我目前正在使用python GUI进行测试并制作了一个脚本,该脚本从2个文本字段中输入2个输入的数字,按下按钮会生成一个标签块(例如,我输入4和5,因此它会生成4x5标签字段)< / p>
但现在我想这样做:当我生成对象时,我想阻止它们 - 搬家 - 交叠 我当前的对象(按钮,文本字段)。 我可以为重叠找到一些东西,但每当我产生新东西时,一切都会移动。我可以将网格中的特定字段设置为“保留”,以便新内容永远不会进入吗?
这是我目前的尝试 - 正如您所看到的,它不再重叠,但如果生成雪花,文本框和按钮仍会“跳”开一小段距离
编辑:“跳跃”是由于添加的雪花的字体大小 - 这仍然留下我如何防止这个问题,因为我不想限制小字体
from tkinter import *
wide = 0
deep = 0
entrytext = "test"
window = Tk()
window.title("test")
window.geometry('1000x1000')
ent = Entry(window)
ent.grid(column=0, row=1)
def GetClicked():
global wide
wide = ent.get()
wide = int(wide)
btn2 = Button(window, text="Width", command=GetClicked)
btn2.grid(column=0, row=2)
ent2 = Entry(window)
ent2.grid(column=0, row=3)
def GetClicked2():
global deep
deep = ent2.get()
deep = int(deep)
btn = Button(window, text="Depth", command=GetClicked2)
btn.grid(column=0, row=4)
def WingBut(column,row):
lbl = Label(window, text="T", font=("Wingdings", 15))
lbl.grid(column=column, row=row)
def clicked(wide,deep):
h = 0
j = 0
while h in range (deep):
i = 0
h += 1
while i in range(wide):
if i > 2 or j > 5:
WingBut(i,j)
i += 1
if i == wide:
j += 1
btn = Button(window, text="Buttonspam",font=("Arial", 10),command=lambda: clicked(wide,deep))
btn.grid(column=0, row=0)
window.mainloop()
答案 0 :(得分:0)
文本框和按钮仍然“跳”一段距离
这是由于动态添加的标签(标记为“T”的标签)的结果大小高于每行的当前行高。由于行大小必须增加以容纳新标签,因此同一行中的其他小部件也会调整大小,以使行的总高度保持一致。调整大小会导致跳跃效果。
纠正它的一种方法是减少“T”标签的字体大小。尝试将其设置为10,问题应该消失。
另一种解决方法是将每行minsize
设置为行中最高窗口小部件的高度,例如: “T”标签小部件高度。
for row in range(5):
window.rowconfigure(row, minsize=36)
您可以在致电window.mainloop()
之前添加上述代码。
我选择了36,因为这使得行最小高度为36像素,这足以让我的系统显示“T”而不会导致行调整大小。
如果您不想对minsize
进行硬编码,则可以动态计算它。
dummy = Label(window, text="T", font=("Wingdings", 20))
dummy.grid(row=0, column=0)
dummy.update_idletasks() # seems to be required to get rendered size
height = dummy.winfo_height()
dummy.grid_forget() # we don't want users seeing this widget
for row in range(5):
window.rowconfigure(row, minsize=height)
这是一种方法。可能有更好,更直接的方式使用字体本身,但如果你感兴趣,可以研究一下。