PyGTK计算器按钮点击报错:TypeError参数不匹配问题求助
Python GTK计算器按钮点击报错解决方法
你在制作Python GTK计算器时,遇到按钮点击函数报错TypeError: Calculator.clickedButton1() takes 1 positional argument but 2 were given,问题出在GTK信号回调函数的参数定义上:
错误原因
GTK控件的信号(比如clicked)触发时,会自动向回调函数传递两个参数:
- 触发信号的控件实例(这里就是被点击的按钮)
- 你手动传递的额外参数(如果有)
而你的clickedButton1方法既没有类实例方法必备的self参数,也没有接收GTK自动传递的控件参数,导致参数数量不匹配。
修正方案
把clickedButton1修改为标准的类实例方法,添加self作为第一个参数,再添加一个参数接收触发信号的控件(名称可自定义,比如widget):
# 修正后的完整代码 import gi gi.require_version("Gtk", "3.0") from gi.repository import Gtk class Calculator(Gtk.Window): def __init__(self): super().__init__(title="Calculator") self.set_border_width(10) # 标题栏 headerBar = Gtk.HeaderBar() headerBar.set_show_close_button(True) headerBar.props.title = "Calculator" self.set_titlebar(headerBar) # 按钮绑定回调 self.button1 = Gtk.Button(label="1") self.button1.connect("clicked", self.clickedButton1) # 输入框 self.entry = Gtk.Entry() self.entry.set_text("") # 布局网格 grid = Gtk.Grid() grid.add(self.button1) grid.attach_next_to(self.entry, self.button1, Gtk.PositionType.TOP, 4, 4) self.add(grid) # 修正后的回调方法 def clickedButton1(self, widget): self.entry.set_text("1") # 运行程序 win = Calculator() win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main()
额外说明
- 类的所有实例方法必须以
self作为第一个参数,才能访问类内部的属性(比如self.entry) - 回调函数中的
widget参数可以不用,但必须在方法定义中声明,否则会再次触发参数不匹配错误 - 若要复用同一个方法处理多个按钮,可以在
connect时传递自定义参数,比如self.button1.connect("clicked", self.on_button_click, "1"),方法定义为def on_button_click(self, widget, value): self.entry.set_text(value)
内容的提问来源于stack exchange,提问作者Wesley Blake
相关产品推荐
相关产品推荐

