事件和信号之bind_class

#bind_class(类,事件源,事件函数)

import tkinter

root = tkinter.Tk()
root.title('bind_class')
root.minsize(300,300)

btn1 = tkinter.Button(root,text = '1')
btn1.place(x=20,y=20,width=40,height=40)
btn2 = tkinter.Button(root,text = '2')
btn2.place(x=60,y=20,width=40,height=40)
btn3 = tkinter.Button(root,text = '3')
btn3.place(x=100,y=20,width=40,height=40)
btn4 = tkinter.Button(root,text = '4')
btn4.place(x=20,y=60,width=40,height=40)
btn5 = tkinter.Button(root,text = '5')
btn5.place(x=60,y=60,width=40,height=40)
btn6 = tkinter.Button(root,text = '6')
btn6.place(x=100,y=60,width=40,height=40)

def changebg(e):#e事件对象传入,e.widget事件源
    e.widget['bg']='red'
# btn1.bind_class(类,事件源,事件函数)
btn1.bind_class('Button','<Enter>',changebg)

root.mainloop()

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
std::function是一个C++11标准库中的模板类,可以包装任意类型的可调用对象(函数、函数指针、lambda表达式等),使其可以像普通函数一样进行调用,具有更大的灵活性和可扩展性。 在实现信号槽的时候,可以使用std::function来包装信号和槽,将信号与槽关联在一起,实现信号与槽之间的通信连接。 示例代码如下: ``` #include <functional> #include <iostream> using namespace std; class MySignal { public: // 声明信号的类型为std::function<void()> typedef std::function<void()> SignalType; // 构造函数,初始化信号为nullptr MySignal() : m_signal(nullptr) {} // 设置信号 void setSignal(SignalType signal) { m_signal = signal; } // 发送信号 void emitSignal() { if (m_signal) { m_signal(); } } private: SignalType m_signal; // 信号 }; class MySlot { public: // 声明槽的类型为std::function<void(int)> typedef std::function<void(int)> SlotType; // 构造函数,初始化槽为nullptr MySlot() : m_slot(nullptr) {} // 设置槽 void setSlot(SlotType slot) { m_slot = slot; } // 槽函数,接收信号传递的参数并进行处理 void handleSignal(int value) { if (m_slot) { m_slot(value); } } private: SlotType m_slot; // 槽 }; int main() { MySignal signal; MySlot slot; // 将信号与槽关联起来 // 信号为无参函数,槽为接收一个int类型参数的函数 signal.setSignal(std::bind(&MySlot::handleSignal, &slot, std::placeholders::_1)); slot.setSlot([](int value) { cout << "MySlot received signal with value: " << value << endl; }); // 发送信号,槽函数会接收到传递的参数并进行处理 signal.emitSignal(); return 0; } ``` 在上述代码实现中,使用std::function实现了信号与槽的关联。在信号MySignal中,以std::function<void()>的类型声明了信号的类型,并将其作为成员变量m_signal保存;在槽MySlot中,以std::function<void(int)>的类型声明了槽的类型,并将其作为成员变量m_slot保存。在将信号与槽关联起来时,利用std::bind函数传递槽函数指针以及它需要的参数,并将返回值作为信号的回调函数。当信号emit时,会调用它关联的槽函数,并将参数传递给槽函数。 通过以上代码实现,我们可以看到使用std::function和bind函数可以非常方便的实现信号和槽之间的连接。同时,由于其灵活性和可扩展性,它也被广泛应用于各种场景中,如事件驱动编程、函数回调等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值