Можете ли вы заставить изображения отображаться как кнопка в tkinter, а не на кнопке? - PullRequest
0 голосов
/ 31 декабря 2018

Я использую TKinter для создания GUI для проекта, который я делаю.Мне было интересно, можно ли заставить TKinter отображать изображение вместо кнопки без рамки, только изображение, по которому нужно щелкнуть;вместо того, чтобы отображать поверх кнопки, с границей кнопки, которая, как я знаю, может быть достигнута с помощью такого кода:

photo=PhotoImage(file="add.png")
b = Button(master,image=photo, command=callback, height=50, width=150)
b.pack()

, что приведет к чему-то подобному тому, что показано в этот урок

Надеюсь, я четко объяснил;заранее спасибо!

1 Ответ

0 голосов
/ 31 декабря 2018

Если вы хотите кнопку без рамки, вы можете установить ширину границы 0: bd=0.Изображение все равно сместится на пиксель вправо вниз при нажатии на него.

Если этого недостаточно, вы можете создать пользовательскую кнопку с помощью метки, а затем связать нажатие мыши и отпустить эту метку.

from tkinter import *

root = Tk()

def callback_function():
    print('Button')

# Image button without border
button_img = PhotoImage(file='image_button.png')
b = Button(root, image=button_img, bd=0, command=callback_function)
b.pack(pady=10)

# Custom button using a label
up_img = PhotoImage(file='image_button_up.png')
dn_img = PhotoImage(file='image_button_dn.png')
e = Label(root, image=up_img, bd=0)
e.pack(pady=10)

# Functions for switching images when button is pressed/released
def press(event):
    e.config(image=dn_img)

def release(event):
    e.config(image=up_img)
    callback_function() # Invoke callback function on release

# Bindings for mouse on label
e.bind('<ButtonPress-1>', press)
e.bind('<ButtonRelease-1>', release)

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