2017-09-14 11 views
0

メインフレームを更新してラベルを更新したい場合MyDialogで「完了」ボタンをクリックすると動作しません。子ダイアログが表示されたときにメインフレームを更新する方法

何か間違いありますか?ありがとう。

これはコードです:メインフレーム メインフレームのラベル更新することでボタンがある場合、子ダイアログ: MyDialogメインフレームは、

私のダイアログを開始するため、その上にボタンがあります
# -*- 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() 

答えて

0

私は方法を持っている、ありがとう!

ポイントは親メソッドを呼び出す方法です。したがって、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

関連する問題