0
0 Комментариев

Итак, у нас есть такая ситуация:

from tkinter import *
x=5
q=Button()
def func():
    x+=2
    q["text"]="hello"
func()

Здесь у нас произойдет ошибка, так как x здесь создается локальная и мы пытаемся изменить несуществующую переменную.
Мы можем поправить ситуацию:

from tkinter import *
x=5
q=Button()
def func():
    global x
    x+=2
    q["text"]="hello"
func()

Здесь ошибок нет, всё прекрасно работает. Мы уточнили, что работаем с глобальной переменной х. Однако с кнопкой q мы данную операцию не проводили. Тогда почему её видно? У меня есть догадка, что объекты видны без применения global, однако в пайтоне всё является объектами, даже переменные. Как тогда так получается?

Второй вопрос касается изображения на кнопке.
В данном случае кнопка с картинкой нормально создаются:

 def run(root):
        dialog_window=Tk()
        img=PhotoImage(file="images//home.gif")
        Button(root,image=img).place(x=0,y=0)
        dialog_window.mainloop()
 run(Tk())

Однако, если размещать кнопку на dialog_window:
    Button(root,image=img).place(x=0,y=0)
То ничего не выйдет и интерпретатор выдаст следующее:

    Traceback (most recent call last):
      File "D:\projects\Tk_editor\test.py", line 14, in <module>
        run(Tk())
      File "D:\projects\Tk_editor\test.py", line 12, in run
        Button(dialog_window,image=img).place(x=0,y=0)
      File "C:\Users\Kastiel\AppData\Local\Programs\Python\Python35-
 32\lib\tkinter\__init__.py", line 2209, in __init__
        Widget.__init__(self, master, 'button', cnf, kw)
      File "C:\Users\Kastiel\AppData\Local\Programs\Python\Python35-
 32\lib\tkinter\__init__.py", line 2139, in __init__
        (widgetName, self._w) + extra + self._options(cnf))
    _tkinter.TclError: image "pyimage1" doesn't exist

В чем проблема? И как создать эту кнопку на втором окне?
P.S: Та же кнопка без картинки нормально создается на втором окне:

def run(root):
    dialog_window=Tk()
    Button(dialog_window).place(x=0,y=0)
    dialog_window.mainloop()
run(Tk())

 
Помогите, пожалуйста, разобраться.


Добавить комментарий