Столкновение изображений и текстовых меток Python / Tkinter - PullRequest
0 голосов
/ 29 ноября 2011

В последнее время я возился с Python и хотел создать графический интерфейс, который читает из CSV и отображает его правильно.

Создание 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 Ответ

3 голосов
/ 29 ноября 2011

Проблема в том, что вы используете grid() и pack() для позиционирования виджетов в одном и том же главном виджете (mainGUI).Это не сработает, потому что по умолчанию оба этих менеджера геометрии пытаются управлять размером родительского виджета и в конечном итоге борются за размер (что блокирует появление GUI как побочного эффекта).

Самая последняя версия Tk (библиотека под Tkinter) выдаст ошибку, если вы попытаетесь сделать это (наконец-то!), Но лучше всего просто использовать один менеджер геометрии для parent виджета.(Есть некоторые тонкости с отключением распространения геометрии, которые могут сделать эту работу, и «родитель» может быть немного хитрым в некоторых ситуациях, но ключевая проблема заключается в том, что вы делаете неправильную вещь в первую очередь.)

Кроме того, одна метка может содержать как изображение, так и текст;см. параметр compound (который включает это и управляет относительными правилами размещения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...