PyGTK计算器

PyGTK calculator

提问人:Wesley Blake 提问时间:8/8/2023 更新时间:8/8/2023 访问量:23

问:

我想用 Python GTK 制作一个计算器。我正在尝试获取一个按钮来在应用程序中显示我的文本。但是,我的函数给了我这个错误。我知道 self 和参数,但我尝试过一个变量并传递到函数中,但它不起作用。TypeError: Calculator.clickedButton1() takes 1 positional argument but 2 were givenGtk.Entry

只有一个 stackoverflow 帖子是相似的,但从未解决。如何在Python Gtk中进行计算?

# this is what the application looks like simply.
import gi

gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

class Calculator(Gtk.Window): # my sub class
    def __init__(self):
        super().__init__(title="Calculator") # the base class Gtk.Window
        self.set_border_width(10)

        # the header and title bar
        headerBar = Gtk.HeaderBar()
        headerBar.set_show_close_button(True)
        headerBar.props.title = "Calculator"
        self.set_titlebar(headerBar)

        # this is my button and calling the function.
        self.button1 = Gtk.Button(label="1")
        self.button1.connect("clicked", self.clickedButton1)

        # creating the entry field
        self.entry = Gtk.Entry()
        self.entry.set_text("")

        # this creates the grid
        grid = Gtk.Grid()
        grid.add(self.button1)
        grid.attach_next_to(self.entry,self.button1,Gtk.PositionType.TOP,4,4)

        self.add(grid)

    # my function
    def clickedButton1():
        self.entry.set_text("1")
        return self.entry

# creating the actual window and running continuosly.
win = Calculator()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
python-3.x pygtk

评论

1赞 mkrieger1 8/8/2023
“我知道自我”,但你没有写def clickedButton1(self):
0赞 Wesley Blake 8/8/2023
但是 self 隐含在 Python 中。
0赞 Wesley Blake 8/8/2023
@mkrieger1这是如何实现的呢?为什么会这样?
0赞 mkrieger1 8/8/2023
方法必须接受至少一个参数,该参数通常称为“self”,并在调用方法时隐式传递。
1赞 mkrieger1 8/8/2023
我不确定你对“隐含自我”的理解是什么。事实是,您必须定义方法,以便有一个参数,通常命名为“self”。调用该方法时,对象将作为此“self”参数的参数隐式传递。没有“两个自我”。

答:

0赞 Wesley Blake 8/8/2023 #1

答案是将 self 传递到函数中。显然,自我并不像我所相信的那样被暗示。功劳归于@mkrieger1。

    def clickedButton1(self, entry):
        text = self.entry.get_text()
        text += "1"
        self.entry.set_text(text)