Изменить изображение кнопки при нажатии - Python 3.7 Tkinter - PullRequest
0 голосов
/ 15 февраля 2020

Это может показаться глупым вопросом, но я не смог найти ответ на stackoverflow, и мне это нужно для проекта. Надеюсь, что кто-то может помочь.

Теперь я создаю кроссплатформенный экран рекордер . Я приложил текущий интерфейс ниже. В приведенном ниже интерфейсе я хочу, чтобы кнопка паузы превратилась в кнопку воспроизведения (обмен изображениями) или наоборот при повторном нажатии. Я прилагаю весь код GUI здесь. пожалуйста, помогите мне в этом. Я работаю python 3.7 на Ubuntu OS, но это должно быть применимо на всех платформах.

Наряду с этим я хотел также знать, как установить фон для всего окна, я пробовал canvas, но не сделал похоже на работу. Я также хотел разместить Lo go рядом с надписью «Screen Videographer», возможно ли это, если я смогу узнать, как его выровнять.

Current UI of the project

Вот код ниже: -

from tkinter import *
from tkinter.ttk import *
from detect_screen_size import detect_screen_size
from PIL import Image, ImageTk
import tkinter as tk

paused= True

LOGO_PNG_PATH="pic/logo.png"
LOGO_PATH="pic/logo.ico"
BG_PATH = 'pic/bg_1.jpg'
LOGO_LINUX_PATH="@pic/logo_1.xbm"


def play():
    global paused,image2
    print("start of function",paused)
    if paused:
        image2=PhotoImage(file="/media/admin_ash/New Volume/proj/screen rec/pic/gui_controls/play.png")
        paused=False
        print("inside if function",paused)
    else:
        image2 = PhotoImage(file="/media/admin_ash/New Volume/proj/screen rec/pic/gui_controls/symbol.png")
        paused=True
        print("inside if function", paused)

def pause():
    print("button hit")
def stop():
    print("button stop")
def record():
    print("button rec")
WIDTH, HEIGHT = 350, 100

root = Tk()
#root.geometry('{}x{}'.format(WIDTH, HEIGHT))
root.resizable(0, 0)
root.style = Style()
#('winnative', 'clam', 'alt', 'default', 'classic', 'vista', 'xpnative')
root.style.theme_use("clam")
if detect_screen_size().detect_os()=="Linux":
    root.iconbitmap(LOGO_LINUX_PATH)
else:
    root.iconbitmap(default=LOGO_PATH)
root.title("Screenvideographer")


frame_display = tk.Frame(relief=FLAT)
label = tk.Label(master=frame_display, text="Screen Videographer")
label.pack()
canvas = Canvas(root, width = 50, height = 50)
canvas.pack(side=LEFT)
img = PhotoImage(file=LOGO_PNG_PATH)
canvas.create_image(50,50, anchor=NW, image=img)


frame_display.pack()
frame_controls = tk.Frame(relief=FLAT)

image1=PhotoImage(file="/media/admin_ash/New Volume/proj/screen rec/pic/gui_controls/record.png")
image2=PhotoImage(file="/media/admin_ash/New Volume/proj/screen rec/pic/gui_controls/symbol.png")
image3=PhotoImage(file="/media/admin_ash/New Volume/proj/screen rec/pic/gui_controls/stop.png")



Button(master=frame_controls,width=35,image=image1,command=record).pack(side=LEFT,padx=7,pady=4)
Button(master=frame_controls,width=35,image=image2,command=play).pack(side=LEFT,padx=7,pady=4)
Button(master=frame_controls,width=35,image=image3,command=stop).pack(side=RIGHT,padx=7,pady=4)


frame_controls.pack()


root.mainloop()

Спасибо !!

1 Ответ

1 голос
/ 17 февраля 2020

1) вы должны загрузить 4 изображения при запуске программы:

img_record=PhotoImage(file="/media/admin_ash/New Volume/proj/screen rec/pic/gui_controls/record.png")
img_pause=PhotoImage(file="/media/admin_ash/New Volume/proj/screen rec/pic/gui_controls/symbol.png")
img_stop=PhotoImage(file="/media/admin_ash/New Volume/proj/screen rec/pic/gui_controls/stop.png")
img_play=PhotoImage(file="/media/admin_ash/New Volume/proj/screen rec/pic/gui_controls/play.png")

2) вам нужно разделить операторы Button(...) и pack(...) для кнопки play/pause:

Button(master=frame_controls,width=35,image=img_record,command=record).pack(side=LEFT,padx=7,pady=4)
play_btn = Button(master=frame_controls,width=35,image=img_play,command=play)
play_btn.pack(side=LEFT,padx=7,pady=4)
Button(master=frame_controls,width=35,image=img_stop,command=stop).pack(side=RIGHT,padx=7,pady=4)

3) изменить изображение кнопки в зависимости от текущего состояния воспроизведения:

def play():
    global paused
    print("start of function", paused)
    if paused:
        play_btn.config(image=img_pause)
        paused = False
        print("inside if function", paused)
    else:
        play_btn.config(image=img_play)
        paused = True
        print("inside if function", paused)

4) редактировать stop() функцию для возврата обратно к play изображение:

def stop():
    global paused
    print("button stop")
    if not paused:
        play_btn.config(image=img_play)
        paused = True

5) если вы хотите показать изображение рядом с меткой Screen Videographer, просто используйте опции image и compound метки:

# logo = PhotoImage(file="/path/to/logo/image")
label = tk.Label(master=frame_display, image=logo, text="Screen Videographer", compound="left")

6), если вы хотите изменить фон цвет всего окна, вам нужно изменить параметры background окна root, рамки внутри окна root и метки внутри рамок.

...