#python #user-interface #wxpython #python-3.5
#python #пользовательский интерфейс #wxpython #python-3.5
Вопрос:
Я пытаюсь создать простое окно с меню в wx python 3.0.4. На самом деле я получаю сообщение об ошибке:
ошибка типа wx.Frame.init(self, ID_ANY, «Title», DefaultPosition, (350 200), DEFAULT_FRAME_STYLE, FrameNameStr): Frame():
аргументы не соответствовали ни одному перегруженному вызову: перегрузка 1: слишком много
перегрузка аргументов 2: аргумент 1 имеет неожиданный тип ‘StandardID’
Даже этот код взят из документации. Может кто-нибудь сказать мне, что я делаю не так, пожалуйста?
import wx
from wx import *
class MainWindow(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, ID_ANY, "Title", DefaultPosition, (350,200), DEFAULT_FRAME_STYLE, FrameNameStr)
self.Bind(wx.EVT_CLOSE, self.OnClose)
menuBar = wx.MenuBar()
menu = wx.Menu()
m_exit = menu.Append(wx.ID_EXIT, "Eamp;xit", "Close window and exit program.")
self.Bind(wx.EVT_MENU, self.OnClose, m_exit)
menuBar.Append(menu, "amp;File")
menu = wx.Menu()
m_about = menu.Append(wx.ID_ABOUT, "amp;About", "Information about this program")
self.Bind(wx.EVT_MENU, self.OnAbout, m_about)
menuBar.Append(menu, "amp;Help")
self.SetMenuBar(menuBar)
self.main_panel = MainPanel(self)
def OnClose(self, e):
self.Close()
def OnAbout(self, event):
dlg = AboutBox(self)
dlg.ShowModal()
dlg.Destroy()
class MainPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
class AboutBox(wx.MessageDialog):
def __init__(self, parent):
wx.MessageDialog.__init__(parent, "About", "About", wx.OK | wx.ICON_INFORMATION, pos=DefaultPosition)
self.CentreOnParent(wx.BOTH)
self.SetFocus()
if __name__ == "__main__":
app = wx.App(False)
frame = MainWindow()
frame.Show()
app.MainLoop()
Ответ №1:
Frame(parent, id=ID_ANY, title="", pos=DefaultPosition,
size=DefaultSize, style=DEFAULT_FRAME_STYLE, name=FrameNameStr)
Вы пропустили родительский аргумент.
Рабочий код
import wx
class MainWindow(wx.Frame):
def __init__(self):
wx.Frame.__init__(
self, None, wx.ID_ANY, "Title", wx.DefaultPosition, (350,200),
wx.DEFAULT_FRAME_STYLE, wx.FrameNameStr)
self.Bind(wx.EVT_CLOSE, self.OnClose)
menuBar = wx.MenuBar()
menu = wx.Menu()
m_exit = menu.Append(
wx.ID_EXIT, "Eamp;xit", "Close window and exit program.")
self.Bind(wx.EVT_MENU, self.OnClose, m_exit)
menuBar.Append(menu, "amp;File")
menu = wx.Menu()
m_about = menu.Append(
wx.ID_ABOUT, "amp;About", "Information about this program")
self.Bind(wx.EVT_MENU, self.OnAbout, m_about)
menuBar.Append(menu, "amp;Help")
self.SetMenuBar(menuBar)
self.main_panel = MainPanel(self)
def OnClose(self, e):
self.Destroy()
def OnAbout(self, event):
dlg = AboutBox(self)
dlg.ShowModal()
dlg.Destroy()
class MainPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
class AboutBox(wx.MessageDialog):
def __init__(self, parent):
wx.MessageDialog.__init__(
self, parent, "About", "About", wx.OK | wx.ICON_INFORMATION,
pos=wx.DefaultPosition)
self.CentreOnParent(wx.BOTH)
if __name__ == "__main__":
app = wx.App(False)
frame = MainWindow()
frame.Show()
app.MainLoop()
Комментарии:
1. каким должен быть родительский элемент? приложение wx?
2. Родительский элемент управления в данном случае использует None в качестве своего главного окна и не является дочерним элементом чего-либо.
3. если я не добавлю туда ни одного, я получу: TypeError: для дескриптора ‘ init ‘ требуется объект ‘sip.simplewrapper’, но получен ‘NoneType’