Python:“第二个参数必须是可调用的”?

2024-10-05 13:24:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python构建一个GTK应用程序,它生成一个始终等于42的等式。我从linux命令行启动它。它说我的函数是不可调用的。我觉得这是可以打电话的,我真的不知道这意味着什么,很抱歉发布这样一个无聊的问题。代码如下:

#!/usr/bin/env python

import random
import gtk

def makePlus():
    num2 = random.randint(0,41)
    num = 42 - num2
    return str(num) + " + " + str(num2)

def makeMinus():
    num2 = random.randint(0,41)
    num = 42 + num2
    return str(num) + " - " + str(num2)

def makeTimes():
    num2 = random.randint(0,41)
    num2 = float(num2)
    num = 42.0 / num2
    return str(num) + " x " + str(num2)

def makeDivideBy():
    num2 = random.randint(0,41) 
    num = 42 * num2
    return str(num) + " / " + str(num2)

def setResultAs(operation):
    if operation == "plus":
        result = makePlus()
    if operation == "minus":
        result = makeMinus()
    if operation == "times":
        result = makeTimes()
    if operation == "divide":
        result = makeDivideBy()
    textbox.set_text(result)

win = gtk.Window()
win.set_title("OSFT Equation Generator")
win.connect('delete-event', gtk.main_quit)

mainbox = gtk.VBox()
win.add(mainbox)

textbox = gtk.Entry()
mainbox.pack_start(textbox)

btnbox = gtk.HBox()
mainbox.pack_start(btnbox)

plusBtn = gtk.Button("Plus")
btnbox.pack_start(plusBtn)
plusBtn.connect("clicked", setResultAs("plus"))

minusBtn = gtk.Button("Minus")
btnbox.pack_start(minusBtn)
minusBtn.connect("clicked", setResultAs("minus"))

timesBtn = gtk.Button("Times")
btnbox.pack_start(timesBtn)
timesBtn.connect("clicked", setResultAs("times"))

divideBtn = gtk.Button("Divide by")
btnbox.pack_start(plusBtn)
divideBtn.connect("clicked", setResultAs("divide"))

win.show_all()
gtk.main()

我得到的错误是:

^{pr2}$

请帮忙。在


Tags: gtkdefconnectplusrandomresultoperationstart
3条回答
def clickedPlus(widget):
    setResultAs("plus")

plusBtn.connect("clicked", clickedPlus)

当将事件连接到action时,需要传递一个字符串事件名,然后传递一个可调用函数,这意味着“当plusBtn发生名为‘clicked’的事件时,运行clickedPlus函数。在

代码调用setResultAs(..),并将函数的返回值用作回调(处理程序)。在

使用以下格式(^{}):

object.connnect("signla_name", handler, arg1, arg2, ...)

例如,替换以下行

^{pr2}$

有:

plusBtn.connect("clicked", setResultAs, "plus")

更新

除上述之外,回调函数setResultAs应该接收widget(发出信号的小部件)作为第一个参数。在

替换以下行:

def setResultAs(operation):

有:

def setResultAs(widget, operation):

还有一个错别字:

divideBtn = gtk.Button("Divide by")
btnbox.pack_start(plusBtn) # <     `plusBtn` should be `divideBtn`
divideBtn.connect("clicked", setResultAs("divide"))

Callable是Python表示“它是某种函数吗?”在

您没有传递要连接的函数;您没有传递任何函数(因为setResultAs不返回值)。有什么东西可以让gtk打回去。在

相关问题 更多 >

    热门问题