我正在 Windows 7 操作系统上使用 python v2.7 和 wxPython v3.0。
在我的应用程序中,我有一个“关于”菜单。单击“关于”菜单后,我想显示有关我的应用程序的一些信息。我正在尝试创建一个如下图所示的对话框/AboutBox。(这是 notepad++ 的 about 对话框。单击 notepad++ 菜单栏中的 ?
。)
notepad++的对话框的特别之处在于我也需要一个文本控制窗口。可以复制信息。
我尝试在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/