簡體   English   中英

'有沒有替代品<button-1> ' 與 bind() function 在 Tkinter?- Python</button-1>

[英]Is there an alternative for '<Button-1>' with bind() function in Tkinter ?- Python

拖動和單擊不是一回事,所以我在想也許有一個替代'<Button-1>'在按下右鍵時說拖動。 因為在我的項目中,我無法顯示菜單(當我單擊小部件時)並同時單擊小部件(拖動它)

import tkinter as tk 
from tkinter import *
from tkinter import ttk


root = Tk()

frame = Frame(root,width=500,height=900)
frame.place(x=0,y=0)


label = Label(frame,text='˃LABEL',fg='green')
label.grid(column=0,row=0)


label2 = Label(frame,text='˃LABEL2',fg='green')
label3 = Label(frame,text='˃LABEL3',fg='green')

def change(event):
    
    label['text'] = '˅LABEL'
    label2.grid(column=0,row=1)
    label3.grid(column=0,row=2)
    if label['text'] == '˅LABEL':
        label.bind('<Button-1>', hide)

def hide(event):
    label['text'] = '˃LABEL'
    label2.grid_forget()
    label3.grid_forget()
    if label['text'] == '˃LABEL':
        label.bind('<Button-1>',change)
        
label.bind('<Button-1>',change)

def make_draggable(widget):
    widget.bind("<Button-1>", on_drag_start)
    widget.bind("<B1-Motion>", on_drag_motion)

def on_drag_start(event):
    widget = event.widget
    widget._drag_start_x = event.x
    widget._drag_start_y = event.y

def on_drag_motion(event):
    widget = event.widget
    x = widget.winfo_x() - widget._drag_start_x + event.x
    y = widget.winfo_y() - widget._drag_start_y + event.y
    widget.place(x=x, y=y)

make_draggable(label)


root.mainloop()

是的,您可以使用 Boolean 值 True 和 False 綁定單個按鈕來執行兩個操作。 請看下面的示例,我使用空格鍵更改背景顏色。

import tkinter


class ChangeColor(tkinter.Tk):
    change = False
    def __init__(self):
        super().__init__()
        self.geometry("300x200+0+0")
        self.bind("<space>", self.change_color)
        
        self.label_1 = tkinter.Label(self, text="Press space bar key to change my background color",background="Red", relief=tkinter.GROOVE, pady=20)
        self.label_1.pack(fill=tkinter.BOTH)
        
    def change_color(self, *args):
        if self.change:
            self.change_to_red() 
        else:
            self.change_to_green()
           
            
    def change_to_red(self):
        self.change=False
        self.label_1.config(background="Red")
        self.label_1.config(text="My background is now red")
        
    def change_to_green(self):
        self.label_1.config(background="Green")
        self.change=True
        self.label_1.config(text="My background is now green")
        
    
if __name__ == "__main__":
    ChangeColor().mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM