【问题标题】:Inserting an image as background in PySimpleGUI window在 PySimpleGUI 窗口中插入图像作为背景
【发布时间】:2021-04-06 12:33:29
【问题描述】:

我刚刚开始使用带有 Tkinter 端口的 PySimpleGUI 框架,但我不明白如何将图像作为程序中窗口的背景插入。

没有与为 Window 组件添加背景图像相关的参数或参数。

我的代码:

import PySimpleGUI as sg
        
layout1 = [[sg.Text("What File Type do you want to generate?")],
           [sg.Checkbox("PowerPoint Presentation", auto_size_text=True)],
           [sg.Checkbox("PDF", auto_size_text=True)]]
        
window = sg.Window("Demo", layout1)
        
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
        
window.close()

【问题讨论】:

  • 可能不可能:github.com/PySimpleGUI/PySimpleGUI/issues/… "PySimpleGUIQt 和 PySimpleGUIWx 支持窗口背景图像。tkinter PySimpleGUI 端口不支持它们。"
  • @RandomDavis 有什么解决方法吗?
  • 不知道,我刚刚通过谷歌搜索了一分钟找到了该链接。我敢肯定,你比我知道的更多。我只能建议,如果可能的话,先在窗口中绘制一个大图像。
  • 没有解决方法。 Tkinter 做不到。
  • 有人可以在 Wx 下分享一个例子吗?

标签: python user-interface tkinter pysimplegui


【解决方案1】:

在最新版本的 PySimpleGUI 中,它非常简单。如果您查看 PySimpleGUI 网站https://pysimplegui.readthedocs.io/en/latest/screenshots_demos/ 上的屏幕截图,您会看到一个以银河系为背景的窗口。

这里是如何做到这一点的代码。 https://github.com/PySimpleGUI/PySimpleGUI/blob/master/DemoPrograms/Demo_Window_Background_Image.py

但是,代码将图像数据嵌入到文件中。我不喜欢那样做。我更喜欢只用文件名来称呼它。如果您也喜欢这样做,只需更改:
background_layout = [ title_bar('This is the titlebar', sg.theme_text_color(), sg.theme_background_color()), [sg.Image(data=background_image)]]
并删除文件底部的background_image = b'...

background_layout = [title_bar('This is the titlebar', sg.theme_text_color(), sg.theme_background_color()), [sg.Image(r'background.png')]]

希望有帮助:)

【讨论】:

  • 不幸的是,这种使用耦合窗口的解决方案在这种形式的 MacOS 中不起作用(不能使用transparent_color)。 Windows 中也有一些副作用;例如,如果您的窗口的一部分位于另一个窗口的后面,那么单击它只会将您的窗口对的前面部分带到前面,而背景则留在另一个窗口的后面。要(部分)处理后一个问题,您可以添加 top_window.bind('<Double-Button-1>', '+DOUBLE_CLICK+') 并且在该事件中,您可以将 window_background 和 top_window 放在前面。
  • 我在 Mac Book Pro 上使用 PySimpleGUI。我还没有尝试在我的窗户上使用透明色。在 Mac 上使用时,我发现有些东西有问题。如果我需要更多功能,我会使用 KIVY。但是,对于需要快速完成的简单应用程序,PySimpleGUI 一直对我有用。我遇到了一个窗口落在另一个窗口后面的问题。尤其是弹出窗口。我使用 `keep_on_top=True' 并解决了问题。我的大多数弹出窗口或者是好的弹出窗口,取消弹出窗口等。最终用户阅读弹出窗口点击按钮。使用 keep_on_top 我从未有过 compalint。
  • 我同意对于简单的弹出窗口,在大多数情况下使用keep_on_top=True 是一个很好的解决方案(特别是因为您最希望用户在那一刻进行交互)。但对于主窗口占据屏幕一半左右的应用来说,它并不是最佳选择。
  • 当然,我完全同意。当我需要更复杂的东西时,我会使用 KIVY。 KIVY 2.0 也变得非常简单。 KIVYMD 真是太棒了,而且有据可查。我可能会一起停止使用 PySimpleGUI。现在我仍然使用它来制作快速的 GUI API 应用程序和 Raspberry Pi 应用程序。
  • 感谢您的提示,我们可能会在某个时候为我们的项目查看 KIVY。现在,我觉得我每周对 PySimpleGUI 的了解越来越好,并且找到了解决我们迄今为止遇到的大多数问题的解决方法,包括上面提到的背景图像,只是顶部没有透明颜色,而是整个顶部窗口的 alpha 设置为 0.7 或 0.8,当然,主题与背景图像相匹配。毕竟,我们很喜欢这个效果:)
猜你喜欢
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 2021-11-20
  • 2022-11-14
  • 2010-12-12
  • 1970-01-01
相关资源
最近更新 更多