将文本控制窗口添加到wxPython中的wxMessageDialog框/ AboutDialogInfo

时间:2014-04-09 12:00:08

标签: python python-2.7 user-interface wxpython wxwidgets

我在Windows 7操作系统上使用python v2.7和wxPython v3.0。

在我的应用程序中,我有一个关于菜单。单击关于菜单后,我想显示有关我的应用程序的一些信息。我正在尝试创建一个对话框/ AboutBox,如下图所示。(这是关于notepad++的对话框。点击记事本++菜单栏中的?。)

关于记事本++对话框的特殊之处在于我也需要一个文本控制窗口。可以复制信息。

enter image description here

我试图在wxPython中做同样的事情,但不幸的是我失败了。我尝试了两种不同的命中和试验方法。

1。我尝试将文本控制窗口添加到对话框 wxMessageDialog,但它根本没有显示。

2. 我试图在wxPython中使用AboutBox,并尝试将文本控件添加到它,但它失败了,因为AboutDialogInfo不是窗口而是文本的父级控件应该是窗口类型。

Error:
    aboutPanel = wx.TextCtrl(info, -1, style = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL)
  File "C:\Python27\lib\site-packages\wx-3.0-msw\wx\_controls.py", line 2019, in __init__
    _controls_.TextCtrl_swiginit(self,_controls_.new_TextCtrl(*args, **kwargs))
TypeError: in method 'new_TextCtrl', expected argument 1 of type 'wxWindow *'

如果有人可以提供一些关于如何将文本控件窗口添加到对话框/ AboutBox的信息,那会很棒吗?

代码:以下是我的代码示例:

import wx
from wx.lib.wordwrap import wordwrap

class gui(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self,None, id, title, style=wx.DEFAULT_FRAME_STYLE)
        panel1 = wx.Panel(self, -1)
        panel1.SetBackgroundColour('#fffaaa')
        menuBar = wx.MenuBar()
        file = wx.Menu()
        file.Append(101, '&About1', 'About1')
        file.Append(102, '&About2', 'About2')
        menuBar.Append(file, '&File')
        self.SetMenuBar(menuBar)
        wx.EVT_MENU(self, 101, self.onAbout)# Event for the About1 menu
        wx.EVT_MENU(self, 102, self.onAboutDlg)# Event for the About2 menu

    def onAbout(self, event):
        message = 'This fantastic app was developed using wxPython.\nwxPython is c00l :)'
        dlg = wx.MessageDialog(self, message, 'My APP', wx.OK|wx.ICON_INFORMATION)
        aboutPanel = wx.TextCtrl(dlg, -1, style = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL)
        aboutPanel.WriteText('Experimentation is the part of our life.\n')
        dlg.ShowModal()
        dlg.Destroy()

    def onAboutDlg(self, event):
        self.panel = wx.Panel(self, -1)
        info = wx.AboutDialogInfo()
        info.Name = "My About Box"
        info.Version = "0.1"
        info.Copyright = "(C) 2014 xxx"
        info.Description = wordwrap(
        "This is an example application that shows the problem "
        "that I am facing :)",
        350, wx.ClientDC(self.panel))
        info.WebSite = ("http://stackoverflow.com/users/2382792/pss", "My Home Page")
        info.Developers = ["PSS"]
        info.License = wordwrap("Driving license and a AK-47 too :P ", 500,wx.ClientDC(self.panel))
        #    Uncomment the following line to get the error! 
        #aboutPanel = wx.TextCtrl(info, -1, style = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL)
        #aboutPanel.WriteText('Experimentation is the part of our life.\n')
        wx.AboutBox(info)


if __name__ == '__main__':
    app = wx.App()
    frame = gui(parent=None, id=-1, title="My-App")
    frame.Show()
    app.MainLoop()

感谢您的时间!

1 个答案:

答案 0 :(得分:1)

wxAboutBox()使用当前平台的标准对话框,因此无法帮助您实现目标。同样,wxMessageDialog是本机消息框对话框,同样不能拥有自定义文本框。 OTOH使用wxDialog构建任何对话框并向其添加元素(并使用sizer进行布局)绝对没有问题。

我的错误是认为你需要使用的课程是wxMessageDialog:不是,你需要wxDialog