Python / Tkinter图像和文本标签冲突

时间:2011-11-29 10:29:32

标签: python tkinter tk

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

CSV累积:

name,description,image location
steven,some guy,/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()

有谁知道问题可能是什么?

1 个答案:

答案 0 :(得分:3)

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

最新版本的Tk(Tkinter下面的lib)如果你尝试这样做会抛出一个错误(最后!)但最好的办法就是每个小部件使用一个几何管理器。 (禁用几何传播有一些微妙之处可以使这个工作,并且“父”在一些情况下可能会很棘手,但关键问题是你首先做错了。)

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