MyGUI_Orge官网教程_4.使用委托delegate

MyGUI 委托

为了将你的函数用作一个委托delegate,你必须使它有一个特殊的签名。你可在事件声明附近找到事件的签名,或者在文档中找指定的窗口部件widget、在WidgetEvent类文档中找公共的事件。例如对eventMouseButtonClick:(MyGUI_WidgetInput.h文件里有部分定义)

To use your function as a delegate, you must have a specific signature for it. You can find the event signatures near the event declaration or indocumentation(external link) for specific widgets and in theWidgetEvent class documentation(external link) for common events. For example, for eventMouseButtonClick :

/** Event : Mouse button pressed and released.\n
     signature : void method(MyGUI::Widget* _sender)
     @param _sender widget that called this event
 */
 EventHandle_WidgetVoid eventMouseButtonClick;
使用这个事件,你的函数必须只有一个形参:MyGUI::Widget* _sender。
同类中的成员函数
class Test 
 { 
 public: 
     void mousePressed(MyGUI::Widget* _widget) 
     { 
         // ... 
     } 
 
     void main() 
     { 
         MyGUI::Button* button = mGUI->createWidget<MyGUI::Button>("Button", 10, 10, 300, 26, MyGUI::Align::Default, "Main"); 
         button->eventMouseButtonClick = MyGUI::newDelegate(this, &Test::mousePressed); 
     } 
 }

 

父类成员函数
class Parent
{
public:
    void mousePressed(MyGUI::Widget* _widget)
    {
        // ...
    }
};
class Child : public Parent
{
    void main()
    {
        MyGUI::Button* button = mGUI->createWidget<MyGUI::Button>("Button", 10, 10, 300, 26, MyGUI::Align::Default, "Main");
#ifdef OGRE_COMPILER_MSVC
        button->eventMouseButtonClick = MyGUI::newDelegate(static_cast<Parent *>(this), &Parent::mousePressed);
#else
        // Visual Studio fails with error C2660: 'MyGUI::newDelegate' : function does not take 2 arguments
        // using this variant.
        button->eventMouseButtonClick = MyGUI::newDelegate(this, &Child::mousePressed);
#endif
    }
}

 

其他类成员函数
class Test 
 { 
 public: 
     void mousePressed(MyGUI::Widget* _widget) 
     { 
         // ... 
     } 
 
 } 
 
 class Main 
 { 
 public: 
     void main() 
     { 
         MyGUI::Button* button = mGUI->createWidget<MyGUI::Button>("Button", 10, 10, 300, 26, MyGUI::Align::Default, "Main");
 
         Test test; 
         button->eventMouseButtonClick = MyGUI::newDelegate(&test, &Test::mousePressed);
 
         // or
 
         Test * test2 = new Test(/*...*/); 
         button->eventMouseButtonClick = MyGUI::newDelegate(test2, &Test::mousePressed);
     } 
 }

 

全局函数
void mousePressed(MyGUI::Widget* _widget) 
 { 
     // ... 
 } 
 
 class Main 
 { 
 public: 
     void main() 
     { 
         MyGUI::Button* button = mGUI->createWidget<MyGUI::Button>("Button", 10, 10, 300, 26, MyGUI::Align::Default, "Main"); 
         button->eventMouseButtonClick = MyGUI::newDelegate(mousePressed); 
     } 
 }

 

任意类的静态成员函数(同类或其他类)
class Test 
 { 
 public: 
     // static function
     static void mousePressed(MyGUI::Widget* _widget) 
     { 
         // ... 
     } 
 
     void main() 
     { 
         MyGUI::Button* button = mGUI->createWidget<MyGUI::Button>("Button", 10, 10, 300, 26, MyGUI::Align::Default, "Main"); 
         button->eventMouseButtonClick = MyGUI::newDelegate(Test::mousePressed); 
     } 
 
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码,只有文本框能显示,其它控件都不能显示。为什么呢?class tkinterGUI(): root = None # 定义为类属性,可以在类的多个实例中共享 def __init__(self, geometry): pass def test(self): pass def create_root_win(self): self.root, self.文本框_主消息 = self.create_toplevel_win(True, "软件标题", "430x670", self.test, False, False) self.root.mainloop() # 在 create_root_win 方法中调用 mainloop 方法,显示窗口 def root_win_add1(self): if self.root is None: self.create_root_win() self.文本框_主消息.insert("1.0","efdssfdadsfasf") # 主内容区域 notebook = Notebook(self.root) notebook.pack(fill=tk.BOTH, expand=True) def create_toplevel_win(self,if_root,title,size,close_cmd,textbox_n,if_resize_width=True,if_resize_heigh=True): if if_root: mygui=tk.Tk() else: mygui=tk.Toplevel(self.root) 窗口win启动 = True mygui.title = title mygui.protocol('WM_DELETE_WINDOW', close_cmd) # 把点击x关闭窗口变成不要关闭并最小化到托盘 # 设置大小 居中展示 #win.bind("<Configure>", lambda root:win_mouse_release(root)) mygui.resizable(width=if_resize_width, height=if_resize_heigh) mygui.wm_attributes('-topmost', 1) #mygui.geometry(size+ "+" + str(self.root.winfo_x() + self.root.winfo_width()) + "+" + str(self.root.winfo_y())) mygui.geometry(size) tbox = ScrolledText(mygui) #self.eval("文本框"+title) = ScrolledText(self.win) tbox.place(relx=0.01, rely=0.18, relwidth=0.99, relheight=0.8) mygui.mainloop() return mygui,tbox # a,b=400,650 def show_msg_in_toplevel(self): self.win_msg,self.win_msg_tb= self.create_toplevel_win(self.root,"实时解盘","350x670",self.隐藏到任务栏,False,False) if __name__=="__main__": root=tkinterGUI("360x670") root.root_win_add1()
最新发布
03-22

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值