【问题标题】:Python GUI toolkits that support text widget transparency or text widget with canvas background?支持文本小部件透明度或具有画布背景的文本小部件的 Python GUI 工具包?
【发布时间】:2013-08-28 03:41:53
【问题描述】:

我正在尝试编写一个在条纹背景上显示可滚动文本小部件的程序。条纹的宽度、条纹的间距、条纹的颜色都可以由用户设置。

这是我想象的一个快速而肮脏的例子:

(它可能看起来像一个丑陋且毫无意义的程序,但它可以作为治疗某些眼部问题的工具)

我最初的想法是将条纹绘制为画布小部件上的矩形。然后我打算用一个透明背景的文本小部件覆盖画布。

现在,我正在使用 Tkinter。但似乎 Tkinter 中的文本小部件不支持透明度或使用画布作为背景。看来只能用纯色作为背景了。

哪些 GUI 工具包可用于 Python 以支持使用文本小部件背景透明度/或使用画布作为背景的文本小部件?

【问题讨论】:

  • 我相信 gtk3 可以做到这一点,也许 gtk2。您可能正在寻找更多类似于 pygame 或 pyglet 的东西
  • 我曾想过使用 pyglet,但用于 pyglet 的 GUI 工具包几乎不存在,或者在过去 5 年中没有更新。我去看看 gtk,谢谢 :)

标签: python user-interface text canvas


【解决方案1】:

如果你愿意使用 Tkinter,这里有一个使用画布小部件的简短示例。

import Tkinter as tk

class Example(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        canvas = tk.Canvas(self, width=800, height=500)
        canvas.pack(side="top", fill="both", expand=True)
        for i in range(0, 800, 40):
            i+= 40
            fill = "yellow" if (i / 40) % 2 == 0 else "green"
            canvas.create_rectangle(i, 0, i+20, 500, fill=fill, outline="")
        canvas_id = canvas.create_text(10, 10, anchor="nw")
        canvas.itemconfig(canvas_id, text="this is the text "*300, width=780)
        canvas.itemconfig(canvas_id, font=("courier", 12))
        canvas.insert(canvas_id, 12, "new ")

if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(side="top", fill="both", expand=True)
    root.mainloop()

这是它的样子:

添加滚动功能留给读者作为练习。

【讨论】:

  • 谢谢!!这很好用,我让它很好地滚动和调整大小。但是后来......我加载了一个整本书长度的字符串(绿野仙踪),它使画布在滚动过程中开始变得有趣并冻结。我不确定画布是否可以处理尽可能多的文本...
  • 更新 - 我通过实现页面解决了上述问题。画布上一次只有一定数量的文本,而且它再次工作得很好。
【解决方案2】:

看看WXpython

这是一个透明顶层窗口的例子

Transparent Frames

WX 是唯一一个我认为可以做到这一点的 GUI 库

这里有几个使用 WX 透明度的示例

Transparent StaticText

Transparent Panel

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-29
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 2018-05-30
    相关资源
    最近更新 更多