编辑:
我找到了一种方法来做到这一点,同时仍然使用.grid() 来放置标签。我们可以在 man 窗口中使用一个框架,然后使用 winfo_width() 和 winfo_height() 获取框架的大小。使用这些信息并在制作每个标签后获取框架的高度和宽度,我们就可以决定何时结束 while 语句。这将在放置标签时为我们提供大致的准确性。唯一的问题是它会测量当前的帧大小而不是小部件的大小,因此您可能需要使用数字才能将其到达您想要的位置。
示例如下:
from tkinter import *
root = Tk()
root.geometry("500x300")
l = ["SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT"]
screen = root.winfo_width()
my_frame = Frame(root)
my_frame.pack(expand=True)
last_row = 0
last_column = 0
my_frame_x = my_frame.winfo_width()
my_frame_y = my_frame.winfo_height()
b = True
while b == True:
for stuff in l:
if my_frame_x > 450 or my_frame_y > 250:
print ("Labels cannot be outside of window!")
b = False
else:
lablabel = Label(my_frame)
lablabel.config(text = stuff)
lablabel.grid(row = last_row, column = last_column)
last_row += 1
last_column += 1
my_frame.update()
my_frame_x = my_frame.winfo_width()
my_frame_y = my_frame.winfo_height()
root.mainloop()
您也可以使用.place() 布局管理器来执行此操作。您需要做的就是定义您希望创建标签的最大像素 x 和 y。
例如,我有一个设置为 800x300 的窗口,并且我已将标签生成器配置为在达到像素限制后不再创建任何标签。这是通过定义标签的像素大小,将该大小添加到下一个位置,然后检查以确保新的 x 和 y 数字不超过您的预定义大小来完成的。
看看这个例子:
from tkinter import *
root = Tk()
root.geometry("800x300")
root.minsize(800, 300)
l = ["SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT", "SOME TEXT"]
last_x = 0
last_y = 0
b = True
while b:
for stuff in l:
last_x+=100
last_y+=30
if last_x > 700 or last_y > 270:
b = False
print ("Labels cannot be outside of window!")
else:
lablabel = Label(root)
lablabel.config(text = stuff)
lablabel.place(x = last_x, y = last_y, width = 100)
root.mainloop()