在wxpython中显示另一个窗口?

2 投票
2 回答
6488 浏览
提问于 2025-04-17 07:01

我在网上查了很多资料,但不太确定是否有办法在wxPython中把两个类显示在两个不同的窗口里。而且我们能否让这两个窗口之间进行沟通(比如一个类是对话框,另一个是主类)?

我记得之前用过Show()这个方法,但不太确定怎么再做一次。

总的来说,我想用一个类来创建一个对话框,而不是用普通的对话框。这样会比使用模态对话框更强大。

谢谢

2 个回答

1

你也可以使用pubsub在两个框架之间进行通信。我在这篇文章中展示了一种实现方法:http://www.blog.pythonlibrary.org/2010/06/27/wxpython-and-pubsub-a-simple-tutorial/

如果你不想让第一个框架隐藏自己,只需删除包含Hide()的那一行代码。

7

这里有一个简单的例子,展示了两个框架之间是如何进行沟通的:

在这里输入图片描述

关键在于发送一个对象的引用,以便在这两个框架之间共享信息。你可以选择在一个框架内部创建另一个框架(就像这个例子中那样),或者通过一个共同的父框架来实现。

代码如下:

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()

撰写回答