子对话框做某事时如何刷新主框架

How to refresh the main frame when the child dialog do someting

我想让主框架刷新来更新标签 当我点击MyDialog上的"done"按钮时,但是现在它不起作用。

有什么问题吗?谢谢

这是代码: MyDialog:子对话框,上面有一个按钮来更新主框架的标签 MainFrame:主框架,上面有一个按钮可以启动我的对话框

# -*- coding: utf-8 -*-

import wx

#Dialog
class MyDialog(wx.Dialog):
    """setting MyDialog."""
    def __init__(self):
        self.dlg_main = wx.Dialog.__init__(self, None, -1, title="setting", size=(300, 300))
        self.btn_ok = wx.Button(self, label="done", pos=(30, 30), size=(50, 26))
        self.Bind(wx.EVT_BUTTON, self.__OnButtonClick_save, self.btn_ok,)

    def __OnButtonClick_save(self, event):
        self.Destroy()
        main = MainFrame()
        **main.set_label_name('test')**
        main.Destroy()

def start_dialog():
    my_dialog = MyDialog()
    my_dialog.ShowModal()
    my_dialog.Destroy()

#Main Frame
class MainFrame(wx.Frame):
    def __init__(self):
        self.main_frame = wx.Frame.__init__(self, None, -1, title='simple', size=(400, 400))
        self.Centre()
        self.label_name = wx.StaticText(self, label="Hello,everyone", pos=(30, 30))
        self.btn_set = wx.Button(self, label="set", pos=(30, 60))
        self.Bind(wx.EVT_BUTTON, self.on_button_click, self.btn_set)

    def set_label_name(self, str):
        print(str)
        self.label_name.SetLabel('hello, Boys')

    def on_button_click(self, event):
        start_dialog()

def show_main():
    main = wx.App()
    main_win = MainFrame()
    main_win.Show()
    main.MainLoop()

if __name__ == '__main__':
    show_main()

方法找到了,谢谢大家!

重点是如何调用父方法,所以,用self.parent.xxx解决问题。

代码如下:

# -*- coding: utf-8 -*-

import wx

#Dialog
class MyDialog(wx.Dialog):
    """setting MyDialog."""
    def __init__(self, parent, title):
        super(MyDialog, self).__init__(parent, title=title, size=(300, 300))
        self.parent = parent
        panel = wx.Panel(self)
        btn_ok = wx.Button(panel, label="done", pos=(30, 30), size=(50, 26))
        btn_ok.Bind(wx.EVT_BUTTON, self.__OnButtonClick_save)

    def __OnButtonClick_save(self, event):
        #THis is the different
        self.parent.set_label_name('test')
        self.Destroy()

def start_dialog():
    my_dialog = MyDialog()
    my_dialog.ShowModal()
    my_dialog.Destroy()

#Main Frame
class MainFrame(wx.Frame):
    def __init__(self):
        self.main_frame = wx.Frame.__init__(self, None, -1, title='simple', size=(400, 400))
        self.init_ui()

    def init_ui(self):
        self.label_name = wx.StaticText(self, label="Hello,everyone", pos=(30, 30))
        btn_set = wx.Button(self, label="set", pos=(30, 60))
        btn_set.Bind(wx.EVT_BUTTON, self.on_button_click)
        self.Centre()

    def set_label_name(self, str):
        self.label_name.SetLabel('hello, Boys')

    def on_button_click(self, event):
        my_dialog = MyDialog(self, "setting")
        my_dialog.ShowModal()
        my_dialog.Destroy()

def show_main():
    main = wx.App()
    main_win = MainFrame()
    main_win.Show()
    main.MainLoop()

if __name__ == '__main__':
    show_main()

感谢这个答案中的想法 Wxpython show dialog on main frame startup