【问题标题】:Tkinter grid layout in loop循环中的 Tkinter 网格布局
【发布时间】:2016-07-24 09:52:08
【问题描述】:

我正在为网格布局而苦苦挣扎 - 基本上我想在循环中打印一些数据,如下所示:

但我自己无法弄清楚。我设法让它正常工作,但只是第一个条目 - 我的代码:

from tkinter import *
from PIL import Image, ImageTk
import urllib.request
import io

app = Tk()
images = []

for i in range(0, 8):
    text1 = Label(font=("Helvetica",10), text="top, left", cursor="hand2")
    text2 = Label(font=("Helvetica",10), text="top, right")
    text3 = Label(font=("Helvetica",10),text="lower")

    image = "https://www.gravatar.com/avatar/b9630126afbff209bb068195307a5e4c?s=328&d=identicon&r=PG"
    get_image = urllib.request.urlopen(image).read()
    im1 = Image.open(io.BytesIO(get_image))
    im_small = im1.resize((70, 70))
    im = ImageTk.PhotoImage(im_small)
    image1 = Label(app, image=im)
    images.append(im)

    image1.grid(rowspan=2, column=0, sticky=W)
    text1.grid(row=0, column=1, sticky=W)
    text2.grid(row=0, column=2, sticky=W)
    text3.grid(row=1, column=1, sticky=W)

app.mainloop()

结果:

我也试过这个:

from tkinter import *
from PIL import Image, ImageTk
import urllib.request
import io

app = Tk()
images = []

for i in range(0, 8):
    text1 = Label(font=("Helvetica",10), text="top, left", cursor="hand2")
    text2 = Label(font=("Helvetica",10), text="top, right")
    text3 = Label(font=("Helvetica",10),text="lower")

    image = "https://www.gravatar.com/avatar/b9630126afbff209bb068195307a5e4c?s=328&d=identicon&r=PG"
    get_image = urllib.request.urlopen(image).read()
    im1 = Image.open(io.BytesIO(get_image))
    im_small = im1.resize((70, 70))
    im = ImageTk.PhotoImage(im_small)
    image_cover = Label(app, image=im)
    images.append(im)

    image_cover.grid(rowspan=2, column=0, sticky=W)
    text1.grid(row=i+1, column=1, sticky=W)
    text2.grid(row=i+1,column=2)
    text3.grid(row=i+2, column=1, sticky=W)

app.mainloop()

由于图片应该占据两行(我们称其为 1 和 2),因此“左上”应位于第 1 列的第 1 行,“右上”应位于第 2 列的第 2 行。

【问题讨论】:

  • 好像你没有正确使用循环。实际上,循环之后您在哪里使用了i?所以首先,让我们学习如何使用循环创建标签。
  • 我知道我需要使用i,但我不确定如何正确使用,所以图像会占据两行+一列,但仍然可以填充两行,如附图所示。

标签: python-3.x tkinter


【解决方案1】:

这是你要找的吗:

from tkinter import *
root = Tk()
root.geometry("500x500")

imgvar = PhotoImage(file="world.gif")

for i in range(5):
    Label(root, image=imgvar, bg='red', bd=10, relief='groove').grid()
    Label(root, text="Upper", bg='blue', bd=5, relief='groove').grid(column=1, row=i, sticky=N)
    Label(root, text="Lower", bg='green', bd=5, relief='groove').grid(column=1, row=i, sticky=S)

?

【讨论】:

  • 差不多,添加 pady 一切正常!
猜你喜欢
  • 1970-01-01
  • 2018-05-22
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
相关资源
最近更新 更多