You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行wxPython程序时为何出现“__init__()需1个位置参数但传入2个”错误?

问题:wxPython计算器程序启动报错解决

我是Python新手,想制作一个带GUI的个人用计算器。参考wxPython入门教程编写了程序,但运行时立即报错,请求帮助。

程序代码

import wx
class Frame(wx.Frame):
  
    def __init__(self, *args, **kwargs):
        super(Frame, self).__init__(*args, **kwargs)

        self.CalcUI()
  
    def __init__(self):
        super().__init__(parent=None, title='AlarmApp')
        panel = wx.Panel(self)

        self.text_ctrl = wx.TextCtrl(panel, pos=(5, 5))
        my_btn = wx.Button(panel, label='Create Alarm', pos=(5, 55))

        self.Show()
    def  CalcUI(self):
        menubar = wx.MenuBar()
        file = wx.Menu()
        fileItem = fileMenu.Append(wx.ID_EXIT, 'Quit', 'Quit Application')
        menubar.Append(file, '&File')
        self.setMenuBar(menubar)

        self.Bind(wx.EVT_MENU, self.OnQuit, fileItem)
        self.SetSize((200,100))
        self.SetTitle('Menu')
        self.Centre()
    def OnQuit(self, e):
        self.Close()

def main():
    app = wx.App()
    ex =  Frame(None)
    ex.Show()
    app.MainLoop()
                  
if __name__ == '__main__':
  main()

报错信息

Traceback (most recent call last):
  File "C:\Users\adam\Documents\Adam\Python\time.py", line 39, in <module>
    main()
  File "C:\Users\adam\Documents\Adam\Python\time.py", line 34, in main
    ex =  Frame(None)
TypeError: Frame.__init__() takes 1 positional argument but 2 were given

问题分析与修正

核心错误点

  1. 重复定义__init__方法:类中存在两个__init__,Python会以最后定义的为准,导致调用Frame(None)时,实际触发的是无参数的__init__,直接引发参数不匹配错误。
  2. 变量名不匹配:CalcUI方法里定义的菜单变量是file,但调用时写成了fileMenu.Append,会触发未定义变量错误。
  3. API方法名大小写错误:wxPython采用驼峰命名规范,self.setMenuBar需改为self.SetMenuBar。
  4. 冗余的窗口显示调用:__init__中的self.Show()和main函数里的ex.Show()重复,保留一处即可。

修正后的完整代码

import wx
class Frame(wx.Frame):
  
    def __init__(self, *args, **kwargs):
        super(Frame, self).__init__(*args, **kwargs)
        # 合并初始化逻辑,统一创建面板和控件
        panel = wx.Panel(self)
        self.text_ctrl = wx.TextCtrl(panel, pos=(5, 5), size=(280, 30))
        my_btn = wx.Button(panel, label='计算', pos=(5, 45))
        self.CalcUI()
  
    def CalcUI(self):
        menubar = wx.MenuBar()
        file_menu = wx.Menu()
        file_item = file_menu.Append(wx.ID_EXIT, '退出', '退出计算器')
        menubar.Append(file_menu, '&文件')
        self.SetMenuBar(menubar)

        self.Bind(wx.EVT_MENU, self.OnQuit, file_item)
        self.SetSize((300, 200))
        self.SetTitle('个人计算器')
        self.Centre()
    
    def OnQuit(self, e):
        self.Close()

def main():
    app = wx.App()
    ex = Frame(None, title='个人计算器')
    ex.Show()
    app.MainLoop()
                  
if __name__ == '__main__':
  main()

内容的提问来源于stack exchange,提问作者mandala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:35:06