【问题标题】:Python; changing the colour of objects in tkinterPython;在 tkinter 中更改对象的颜色
【发布时间】:2021-06-22 14:04:17
【问题描述】:

我刚刚开始使用 python tkinter 库,但在按照在线教程进行操作时遇到了一些问题。我似乎无法改变任何东西的颜色(按钮、文本、光标......)。我已经在两台不同的计算机上尝试过,两次都得到相同的结果。我正在使用 anaconda 发行版,并使用“conda install tkinter”命令添加了 tkinter。

工作示例:

from tkinter import * 
from tkinter.ttk import *
  

master = Tk()
master.geometry("500x500")
master.config(cursor="dot red")
  

mainloop()

我什至尝试过:

from tkinter import * 
from tkinter.ttk import *
  

master = Tk()
master.geometry("500x500")
master.config(cursor="dot #ff0000")
  

mainloop()

Bot 产生了完全相同的结果(我真的很抱歉用我的手机拍摄了屏幕的照片,但光标不会出现在打印屏幕上): Cursor picture

感谢您的所有帮助。

【问题讨论】:

  • 尝试添加root.config(cursor="none"),然后您需要设计和实现代码,显示跟随鼠标位置的精灵

标签: python tkinter


【解决方案1】:

我做了一个非常快速的搜索,发现根据这个站点,Windows 不支持光标颜色:

https://www.geeksforgeeks.org/how-to-change-the-color-and-symbol-of-the-cursor-in-tkinter/

但是,如果您在这两台计算机上都没有使用 Windows,我不确定是什么导致了问题。

【讨论】:

  • 我不敢相信我错过了 Windows 不支持它。你知道是否有更好的 Python 图形用户界面来与 windows 一起使用?
  • Kevx555,我并没有真正搞砸过很多 UI 库,但我听说 PyQt5 提到了很多,有一些非常好的评论。我还发现这个问题可以让您实现最初的目标,尽管我没有使用 PyQt 的个人经验来确认。 stackoverflow.com/questions/36725245/…
【解决方案2】:

正如另一个答案指出的那样,似乎没有办法在 Windows 上更改光标的颜色,但您可以使用 .config(cursor="none") 删除光标并添加您自己的跟随鼠标的精灵,如下所示:

import tkinter as tk


class CanvasWithColouredCursor(tk.Canvas):
    def __init__(self, master, **kwargs):
        super().__init__(master, **kwargs)

        self.cusor_sprite_id = None

        super().config(cursor="none")

        super().bind("<Enter>", self.show_sprite)
        super().bind("<Leave>", self.delete_sprite)
        super().bind("<Motion>", self.move_sprite)

    def show_sprite(self, event:tk.Event=None):
        self.delete_sprite()
        pos = event.x, event.y
        self.cusor_sprite_id = self.create_circle(*pos, r=5, fill="red",
                                                  outline="red")

    def move_sprite(self, event:tk.Event):
        if self.cusor_sprite_id is None:
            return None
        pos = event.x, event.y
        super().moveto(self.cusor_sprite_id, *pos)

    def delete_sprite(self, event:tk.Event=None):
        if self.cusor_sprite_id is not None:
            super().delete(self.cusor_sprite_id)
            self.cusor_sprite_id = None

    def create_circle(self, x, y, r, **kwargs):
        # Taken from: https://stackoverflow.com/a/17985217/11106801
        return super().create_oval(x-r, y-r, x+r, y+r, **kwargs)


root = tk.Tk()

canvas = CanvasWithColouredCursor(root)
canvas.pack()

root.mainloop()

这只是为了展示这个概念,如果你移动鼠标非常快,精灵就会扭曲。

【讨论】:

    【解决方案3】:

    很抱歉没有看到 Windows 不支持它。有没有更好的文档化的 GUI 来支持完整的 windows 支持?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-10
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      相关资源
      最近更新 更多