別のウィンドウをwxpythonに表示しますか?

私はインターネットの周りを見てきましたが、2つの別々のウィンドウにwxPythonの2つのクラスを表示する方法があるかどうかはわかりません。そして、私たちはそれらの間でコミュニケーションを取ることができますか?(あるクラスがダイアログとなり、もう1つがメインクラスのように)

私は Show()を使う前にこれをやったと思いますが、これを繰り返す方法がわかりません。

だから、基本的に私はダイアログを持つことができますが、代わりにクラスを使用したいと思っています。これは、モーダルダイアログを使うよりも強力です。

ありがとう

2

2 答え

ここでは、2つのフレームが通信する簡単な例を示します。

enter image description here

このトリックは、オブジェクトの参照をフレーム間で共有することです。どちらか一方を他方の内部に作成するか(この場合)共通の親を介して作成します。 コードは次のとおりです。

import wx

class MainFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, size=(150,100), title='MainFrame')
        pan =wx.Panel(self)
        self.txt = wx.TextCtrl(pan, -1, pos=(0,0), size=(100,20), style=wx.DEFAULT)
        self.but = wx.Button(pan,-1, pos=(10,30), label='Tell child')
        self.Bind(wx.EVT_BUTTON, self.onbutton, self.but)
        self.child = ChildFrame(self)
        self.child.Show()

    def onbutton(self, evt):
        text = self.txt.GetValue()
        self.child.txt.write('Parent says: %s' %text)


class ChildFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, None, size=(150,100), title='ChildFrame')
        self.parent = parent
        pan = wx.Panel(self)
        self.txt = wx.TextCtrl(pan, -1, pos=(0,0), size=(100,20), style=wx.DEFAULT)
        self.but = wx.Button(pan,-1, pos=(10,30), label='Tell parent')
        self.Bind(wx.EVT_BUTTON, self.onbutton, self.but)

    def onbutton(self, evt):
        text = self.txt.GetValue()
        self.parent.txt.write('Child says: %s' %text)


if __name__ == "__main__":

    App=wx.PySimpleApp()
    MainFrame().Show()
    App.MainLoop()
7
追加された
ありがとう兄貴......
追加された 著者 Subham Debnath,
明確でエレガントな、ありがとう!
追加された 著者 Tony,

You can also use pubsub to communicate between two frames. I show one way of doing just that in this article: http://www.blog.pythonlibrary.org/2010/06/27/wxpython-and-pubsub-a-simple-tutorial/

最初のフレームを隠したくない場合は、Hide()を含む行を削除してください。

1
追加された