Размещение изображения с помощью ttk в сетке с Python 2.7.11

Я застреваю, когда пытаюсь поместить изображение в свой графический интерфейс. Основываясь на программе, над которой я работаю, я могу работать только с Python v2.7.11. У меня есть базовый графический интерфейс, который я вытащил из другого места (показан ниже, верхний код). Однако, когда я пытаюсь разместить изображение, используя аналогичный процесс, мой графический интерфейс полностью исчезает (другие функции не отображаются). Изменить: ошибка, которую я получаю: «изображение« pyimage28 »не существует, хотя я определяю свое изображение как« ошибка.gif ». Полное сообщение об ошибке показано во втором фрагменте кода; как код, так и изображение находится на рабочем столе.

Основываясь на другом вопросе на этом сайте, моя попытка показана ниже, начиная с переменная «метка».

В конечном счете, я хотел бы сделать две вещи.

  1. Поместите изображение в верхний левый угол графического интерфейса вместо элемента frame.
  2. Дайте этому изображению свойства, чтобы я мог сохранять координаты x, y, когда я нажимаю где-нибудь на изображении, или координаты отображаются в реальном времени за пределами изображения.

.

from Tkinter import *
import ttk

root = Tk()

content = ttk.Frame(root)
#frame = ttk.Frame(content, borderwidth=5, relief="sunken", width=200, height=100)

label = ttk.Label(root)
image1 = PhotoImage(file='bug.gif')
label['image'] = image1

latlbl = ttk.Label(content, text="Latitude")
latval = ttk.Entry(content)
lonlbl = ttk.Label(content, text="Longitude")
lonval = ttk.Entry(content)

onevar = BooleanVar()
twovar = BooleanVar()
threevar = BooleanVar()
onevar.set(True)
twovar.set(False)
threevar.set(True)

one = ttk.Checkbutton(content, text="One", variable=onevar, onvalue=True)
two = ttk.Checkbutton(content, text="Two", variable=twovar, onvalue=True)
three = ttk.Checkbutton(content, text="Three", variable=threevar, onvalue=True)
ok = ttk.Button(content, text="Okay")
cancel = ttk.Button(content, text="Cancel")

content.grid(column=0, row=0)

#frame.grid(column=0, row=0, columnspan=3, rowspan=2)

label.grid(column=0, row=0, columnspan=3, rowspan=2)
latlbl.grid(column=3, row=0, columnspan=1)
latval.grid(column=4, row=0, columnspan=2)
lonlbl.grid(column=3, row=1, columnspan=1)
lonval.grid(column=4, row=1, columnspan=2)
one.grid(column=0, row=3)
two.grid(column=1, row=3)
three.grid(column=2, row=3)
ok.grid(column=3, row=3)
cancel.grid(column=4, row=3)
label.pack()

root.mainloop()

Полная ошибка кода:

runfile('C:/Users/ajpung/Desktop/untitled9.py', wdir='C:/Users/ajpung/Desktop')
Traceback (most recent call last):

  File "<ipython-input-1-1596c9c787bc>", line 1, in <module>
    runfile('C:/Users/ajpung/Desktop/untitled9.py', wdir='C:/Users/ajpung/Desktop')

  File "C:\Users\ajpung\AppData\Local\Continuum\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 699, in runfile
execfile(filename, namespace)

  File "C:\Users\ajpung\AppData\Local\Continuum\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 74, in execfile
exec(compile(scripttext, filename, 'exec'), glob, loc)

  File "C:/Users/ajpung/Desktop/untitled9.py", line 25, in <module>
label['image'] = image1

  File "C:\Users\ajpung\AppData\Local\Continuum\Anaconda2\lib\lib-tk\Tkinter.py", line 1333, in __setitem__
self.configure({key: value})

  File "C:\Users\ajpung\AppData\Local\Continuum\Anaconda2\lib\lib-tk\Tkinter.py", line 1326, in configure
return self._configure('configure', cnf, kw)

  File "C:\Users\ajpung\AppData\Local\Continuum\Anaconda2\lib\lib-tk\Tkinter.py", line 1317, in _configure
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))

TclError: image "pyimage1" doesn't exist

person AaronJPung    schedule 11.02.2016    source источник
comment
Изображение bug-gif, возможно, находится в каталоге, который Python не ищет. Пожалуйста, опубликуйте все сообщение об ошибке.   -  person    schedule 11.02.2016
comment
По вашему предложению добавлен полный код ошибки.   -  person AaronJPung    schedule 11.02.2016
comment
Скопируйте изображение photo= с этой страницы, поместите его на этикетку с помощью data= и посмотрите, работает ли effbot. .org/tkinterbook/photoimage.htm Если да, то проблема в том, что Python не может найти изображение.   -  person    schedule 11.02.2016
comment
Я скопировал строку photo= с этой страницы и использовал: photo = PhotoImage(data=photo) image1 = PhotoImage(file=photo) label['image'] = image1 Чтобы исправить ситуацию, когда программа не может найти изображение, я Я также пытался указать полный путь к файлу (C:/Users/ajpung/Desktop/bug.gif). Тот же результат.   -  person AaronJPung    schedule 11.02.2016
comment
Иногда возникают проблемы с PhotoImage и сборкой мусора (но скорее внутри функции) effbot.org/tkinterbook/photoimage.htm< /а> . Возможно, у вас есть эта проблема.   -  person furas    schedule 11.02.2016
comment
Этот код не дает ошибки, о которой вы говорите.   -  person Bryan Oakley    schedule 11.02.2016
comment
@BryanOakley - я только что скопировал свой код, перезапустил ядро ​​и получил ту же ошибку. Имейте в виду, я использую Python 2.7.11 — не уверен, что это имеет значение.   -  person AaronJPung    schedule 11.02.2016
comment
Я запустил код с python 2.7.6, и он отлично работает (когда вы исправляете ошибку, описанную в моем ответе). Ошибка не выдается. В вашем коде нет ничего, что могло бы вызвать ошибку, о которой вы говорите. Вы просто должны использовать другой код.   -  person Bryan Oakley    schedule 11.02.2016
comment
Я попытался сократить свой код, удалив все кнопки и т. д. В новом окне Spyder я скопировал и запустил тот же код. Основываясь на вашем последующем комментарии, я рассмотрю проблему со Spyder — спасибо за ваше терпение!   -  person AaronJPung    schedule 11.02.2016
comment
Было бы полезно, если бы вы упомянули, что используете Spyder, а не более распространенный интерпретатор Python. Это может быть как-то связано с этим. Хотя, если это так, похоже, это будет ошибка в Spyder, потому что код выглядит нормально, за исключением одной проблемы с упаковкой метки.   -  person Bryan Oakley    schedule 11.02.2016


Ответы (2)


Код, который вы разместили, не дает ошибки, которую вы говорите, при работе в стандартном интерпретаторе Python.

При этом в вашем коде есть одна критическая ошибка, которая не позволяет ему работать. Вы используете как grid, так и pack в корневом окне. Вам нужно удалить эту строку:

label.pack()
person Bryan Oakley    schedule 11.02.2016

Я думал, что пробовал это раньше, но проблема не в Spyder. Переключение с root = Tk() на root = Toplevel() устранило исходную проблему.

person AaronJPung    schedule 11.02.2016