我最近一直在修补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()
有谁知道问题可能是什么?
答案 0 :(得分:3)
问题是您使用grid()
和pack()
将小部件放在同一个主窗口小部件(mainGUI
)中。这是行不通的,因为默认情况下,这两个几何管理器都会尝试管理父窗口小部件的大小,并最终争夺大小(这会阻止GUI作为副作用出现)。
最新版本的Tk(Tkinter下面的lib)如果你尝试这样做会抛出一个错误(最后!)但最好的办法就是每个父小部件使用一个几何管理器。 (禁用几何传播有一些微妙之处可以使这个工作,并且“父”在一些情况下可能会很棘手,但关键问题是你首先做错了。)
此外,单个标签可以包含图像和一些文本;请参阅compound
选项(启用此选项并控制相对放置规则)。