【问题标题】:Button Effects in tkinter Canvastkinter 画布中的按钮效果
【发布时间】:2020-06-29 07:42:34
【问题描述】:

我有以下代码:

canvas = tk.Canvas(frame, width=20, height=50)
buttonBG1 = canvas.create_rectangle(0, 0, 20, 50, outline="")
buttonTXT1 = canvas.create_text((10, 25), text="Press Me", angle='90', font=("Calibri", 8))
canvas.tag_bind(buttonBG1, "<ButtonPress-1>")
canvas.tag_bind(buttonTXT1, "<ButtonRelease-1>", press) # press is the command function 
canvas.grid(column=0, row=0)

我的问题是关于如何为我正在创建的按钮(没有轮廓)添加效果。我知道我可以通过添加:

.configure(relief="sunken")

.configure(relief="raised")

但是,当我以这种方式将其添加到我的代码中时,它不起作用:

canvas.configure(relief="sunken")
canvas.configure(relief="raised")

它没有给出任何错误,但它没有给出应有的效果。我的代码有什么问题。

【问题讨论】:

    标签: python tkinter canvas


    【解决方案1】:

    您的代码没有错,但默认情况下,画布的边框宽度为 0,因此浮雕效果是不可见的。为了能够看到它们,您需要将边框宽度设置为至少 1。

    在下面的示例中,我还使用矩形的activefill 选项在光标位于矩形上方时突出显示它。

    import tkinter as tk
    
    def press(event):
        # make relief effect button is pressed
        canvas.config(relief='sunken')
    
    def release(event):
        # remove relief when button is no longer pressed
        canvas.config(relief='flat')  
    
    root = tk.Tk()
    canvas = tk.Canvas(root, width=20, height=50, borderwidth=1)
    buttonBG1 = canvas.create_rectangle(0, 0, 20, 50, outline="", activefill='#F1F1F1')  # highlight rectangle when active
    buttonTXT1 = canvas.create_text((10, 25), text="Press Me", angle='90', font=("Calibri", 8))
    canvas.bind("<ButtonPress-1>", press)
    canvas.bind("<ButtonRelease-1>", release)
    canvas.grid(column=0, row=0)
    root.mainloop()
    

    【讨论】:

    • 当我添加边框宽度时,它仍然没有给我效果。此外,我不希望画布上有任何轮廓,而边框宽度给了我轮廓效果
    • 好的,那么如果您不想看到边框,为什么还要尝试更改浮雕(由于为边框选择了颜色,浮雕只是一种视觉效果)?你到底想达到什么目标?
    • 我想添加凹陷和凸起的效果来查看我按下了按钮但是,最初我不想看到按钮的边框,除非按下。
    猜你喜欢
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    相关资源
    最近更新 更多