Tkinter - изображение не будет отображаться на кнопке, несмотря на сохранение глобальной ссылки - PullRequest
0 голосов
/ 25 января 2019

Я хочу разместить кнопку в верхнем правом углу, чтобы кнопка была изображением.Я понимаю, что такое область видимости / сборка мусора и т. Д., И видел все другие вопросы, задаваемые здесь, которые игнорируют этот факт.

Однако я попробовал множество методов, включая создание self.photo и объявление фотографии в качестве глобальной переменной.На самом деле я даже не уверен, что это проблема, потому что я объявляю фотографию в той же области, в которой я называю mainloop().

Мой код прямо сейчас (который в основном заимствован из Окно перетаскиванияпри использовании overrideredirect , так как я не очень знаком с tkinter):

import tkinter

pink="#DA02A7"
cyan="#02DAD8"
blue="#028BDA"

class Win(tkinter.Tk):

    def __init__(self,master=None):
        tkinter.Tk.__init__(self,master)
        self.overrideredirect(True)
        self._offsetx = 0
        self._offsety = 0
        self.bind('<Button-1>',self.clickwin)
        self.bind('<B1-Motion>',self.dragwin)
        self.geometry("500x500")

    def dragwin(self,event):
        x = self.winfo_pointerx() - self._offsetx
        y = self.winfo_pointery() - self._offsety
        self.geometry('+{x}+{y}'.format(x=x,y=y))

    def clickwin(self,event):
        self._offsetx = event.x
        self._offsety = event.y

win = Win()

# put a close button
close_button = tkinter.Button(win, bd=0, command=win.destroy)
global photo
photo=tkinter.PhotoImage("close.gif")
close_button.config(image=photo, height="10", width="10")

# pack the widgets
close_button.pack(anchor=tkinter.NE)

win.configure(bg=pink)

win.mainloop()

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Правильный способ создания фотоизображения - передача пути к параметру file.В противном случае ваш путь будет присвоен внутреннему имени изображения, и, следовательно, файл не будет связан с изображением.

photo=tkinter.PhotoImage(file="close.gif")
0 голосов
/ 25 января 2019

Я обычно даю PhotoImage s имя и использую имя в image параметров:

photo=tkinter.PhotoImage(name='close', file="close.gif")
close_button.config(image='close')

Я не уверен, что это единственный способ, но здесь это работает.

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