我在Windows 7操作系统上使用python v2.7和wxPython v3.0。
在我的应用程序中,我有一个关于菜单。单击关于菜单后,我想显示有关我的应用程序的一些信息。我正在尝试创建一个对话框/ AboutBox,如下图所示。(这是关于notepad++的对话框。点击记事本++菜单栏中的?
。)
关于记事本++对话框的特殊之处在于我也需要一个文本控制窗口。可以复制信息。
我试图在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()
感谢您的时间!
答案 0 :(得分:1)
wxAboutBox()
使用当前平台的标准对话框,因此无法帮助您实现目标。同样,wxMessageDialog
是本机消息框对话框,同样不能拥有自定义文本框。 OTOH使用wxDialog
构建任何对话框并向其添加元素(并使用sizer进行布局)绝对没有问题。
我的错误是认为你需要使用的课程是wxMessageDialog
:不是,你需要wxDialog
。