【问题标题】:Python/Tkinter Image and Text label collisionPython/Tkinter 图像和文本标签冲突
【发布时间】:2011-11-29 10:29:31
【问题描述】:

我最近一直在修改 Python,想制作一个从 CSV 读取并正确显示的 GUI。

CSV 构建:

名称、描述、图片位置
史蒂文,某个人,/res/pic/steven.gif

前两个条目应该放在文本标签中,最后一个条目应该用作图像。 在我的代码中,我尽可能插入图片,这很有效。但是,一旦我还嵌入了文本标签,我认为应用程序就会陷入无限循环。 如果我从代码中删除图像,文本标签会起作用,反之亦然。

from Tkinter import *
from PIL import *
import os
import csv

#Functions 

def insertImage(guiName,picture,x,y):

    #This is the Image label insertion, delete it and Text label works
    img = PhotoImage(file=entryList[picture][2])
    preview = Label(guiName, image=img)
    preview.img = img
    preview.grid(row=x,column=y)

    #This is the Text label insertion, delete it and Image Label works        
    Name = StringVar()
    labelName = Label(mainGUI, textvariable=Name, justify=LEFT)
    Name.set(entryList[picture][2])
    labelName.pack()

global mainGUI
mainGUI = Tk()
mainGUI.geometry("500x500")
mainGUI.title('Index')

reader = csv.reader(open("res/test.csv", "rb"))
entryList = []
for row in reader:
    entryList.append( row )

#insertImage(mainGUI,entryList[1][2],1,1)
insertImage(mainGUI,1,1,1)
#insertImage(mainGUI,2,2,1)

mainGUI.mainloop()

有人知道问题可能是什么吗?

【问题讨论】:

    标签: python tkinter tk


    【解决方案1】:

    问题在于您使用grid()pack() 将小部件定位在同一个主小部件(mainGUI) 中。那是行不通的,因为默认情况下,这两个几何管理器都试图管理父窗口小部件的大小并最终争夺大小(这会阻止 GUI 作为副作用出现)。

    如果您尝试这样做(终于!),最新版本的 Tk(Tkinter 下的库)将引发错误,但您最好的选择是每个 parent 小部件只使用一个几何管理器. (禁用几何传播有一些微妙之处可以使这项工作正常进行,并且“父级”在某些情况下可能会有些棘手,但关键问题是您一开始就做错了。)

    此外,单个标签可以同时包含图像和一些文本;请参阅compound 选项(启用此选项并控制相对放置规则)。

    【讨论】:

    • @Demon:没问题。你在这里问,我们帮助,你被分类。这就是它的工作方式。
    猜你喜欢
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    相关资源
    最近更新 更多