如何在 PySimpleGUI(Tkinter 端口)中更新按钮鼠标悬停颜色?

分享于2022年07月17日 button pysimplegui python user-interface 问答
【问题标题】:如何在 PySimpleGUI(Tkinter 端口)中更新按钮鼠标悬停颜色?(How to update button Mouseover color in PySimpleGUI (Tkinter Port)?)
【发布时间】:2022-01-27 07:39:42
【问题描述】:

我正在编写一个程序。我创建了整个 gui 以及根据事件更新我的窗口的时间。一切都很好,但我认为 PySimpleGUI 开发人员实际上错过了 按钮鼠标悬停颜色更新。通常应该是

window[key].update[mouseover_color=(bg_color, txt_color)]

有什么方法可以做到吗?

编辑: 我忘记了我的一个问题,因为我无法向标题栏添加按钮,所以我将其删除并使用多窗口创建自己的标题栏并将其与其他窗口绑定。但这里的问题是,没有圆角,标题看起来很恶心.

请告诉我一种方法。

另一个问题是,假设用户单击按钮并在前一个窗口上打开新窗口,但是当我将鼠标悬停在新窗口屏幕之外时,它消失了我的意思是它在我的主窗口后面,即使我设置新窗口继续顶部 = 真


【解决方案1】:

这里需要 tkinter 代码来更新鼠标悬停时的颜色。

不同的 tkinter 小部件用作具有不同选项的按钮 use_ttk_buttons

  • 使用选项 use_ttk_buttons=False ,它将使用tkinter Button 作为sg.Button,并且可以通过 configure element.Widget 的方法 configure 更新选项 activeforeground activebackground
  • 使用选项 use_ttk_buttons=True ,它将使用 tkinter.ttk 按钮作为 sg.Button,并且可以使用 tkinter.ttk 样式更新相关选项。

这是演示代码

import PySimpleGUI as sg


def update(element, colors):
    widget = element.Widget
    if isinstance(widget, sg.tk.Button):
        widget.config(activeforeground=colors[0], activebackground=colors[1])
    else:
        style_name = widget.configure()["style"][-1]
        style = sg.ttk.Style()
        style.map(style_name, foreground=[('active', colors[0])], background=[('active', colors[1])])

index = 0
color = {0: ("white", "blue"), 1: ("yellow", "green")}

font = ("Courier New", 16)
sg.theme("DarkBlue3")
sg.set_options(font=font)

layout = [[sg.Button("Hello", mouseover_colors=color[index], use_ttk_buttons=True)]]
window = sg.Window("test", layout, finalize=True)

while True:
    event, values = window.read()
    if event in (sg.WINDOW_CLOSED, 'Exit'):
        break
    elif event == 'Hello':
        index = 1 - index
        update(window['Hello'], color[index])

window.close()

  • 谢谢 完全工作 真的很感激。由于我是编程新手,请您解释一下您最近创建的更新功能
  • 如上更新。
  • 知道了,谢谢请阅读我的问题我更新它
  • 非window平台不知道。