python - 在wxPython中向wxMessageDialog box/AboutDialogInfo添加文本控制窗口

标签 python python-2.7 user-interface wxpython wxwidgets

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

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

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

enter image description here

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

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

2.我尝试使用 AboutBox在 wxPython 中,并尝试向其中添加文本控件,但失败了,因为 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()

感谢您的宝贵时间!

最佳答案

wxAboutBox() 使用当前平台的标准 about 对话框,因此它不会帮助您实现目标。类似地,wxMessageDialog 是 native 消息框对话框,它同样不能包含自定义文本框。 OTOH 使用 wxDialog 构建任何您想要的对话框并向其中添加元素(并使用 sizer 来布局它们)绝对没有问题。

你的错误是认为你需要使用的类是 wxMessageDialog:它不是,你需要 wxDialog

关于python - 在wxPython中向wxMessageDialog box/AboutDialogInfo添加文本控制窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22961860/

相关文章:

python - 如何替换Python中的函数?

python - BeautifulSoup - 解析不返回预期的标签

java - 如何使用 JAVA、SWT 在我的 UI 上显示滚动?

java - JFrame调整大小问题

Python:通过比较文件输入创建具有多个值的新字典

python - 获取当前的 python 模块对象(按名称或其他方式)

python - 在 Windows 7 上升级权限后 Esky 卡住

ios - 尝试从 jenkins 运行 UI 自动化脚本时出错

python - Pandas :选择两列不同的行

python - 正确的 python re regex