【问题标题】:how to add arguments to a Qt PySide built-in Signal when connecting to a Slot连接到插槽时如何向 Qt PySide 内置信号添加参数
【发布时间】:2013-04-17 01:52:31
【问题描述】:

这是我尝试实现一个简单表达式求值器的类:

class mainWindow(QtGui.QMainWindow, mainGui.Ui_MainWindow):

    def __init__(*args, **kwargs)
        super(mainWindow, self).__init__(*args, **kwargs)
        self.setupUi(self)
        self.connecting_range_displays()

    def connecting_range_displays(self):    
        ranges = num_ranges()
        first_range = num_ranges.ones_range
        second_range = num_ranges.tens_range

        print first_range
        print second_range

        self.top_lineEdit.setText(str(first_range))
        self.bottom_lineEdit.setText(str(second_range))

        ex_a = first_range + second_range
        print "this is expressions answer", ex_a

        self.answer_lineEdit.returnPressed.connect(self.ex_evaluator)

    def ex_evaluator(self, right_answer):
        answer = self.answer_lineEdit.text()

        if ex_a == right_answer:
            print "Correct answer bucko"

在上面的一个简单算术练习应用程序的代码中,我使用两行来显示一定范围内的随机数,第三行QlineEditanswer_lineEdit 我用它来获取用户输入,然后检查它是否正确我使用Signal returnPressed 并将其连接到ex_evaluator,然后它会告诉您您是否给出了正确的响应,问题似乎是我无法将ex_a 参数传递给函数能够评估它,可能是命名空间问题,我在编码方面还是个新手,我的理念是只学最少的东西才能让我到达我想要的地方,所以我想知道我是否必须学习如何子类化QLineEdit 我不知道该怎么做,我看到装饰器可能会有所帮助,这是我不想陷入的另一个麻烦。

【问题讨论】:

标签: python qt pyside qlineedit


【解决方案1】:

您需要执行以下操作之一:

  • 通过将 ex_a 更改为“self.ex_a”来将其设为类属性。然后它可以在课堂内的任何地方使用
  • 使用 lambda 或 functools.partial 将其传递给槽(ex_evaluator)

对于第二个选项,我写了一个教程来描述这两种方法:http://www.blog.pythonlibrary.org/2013/04/10/pyside-connecting-multiple-widgets-to-the-same-slot/

要使用 lambda,请执行以下操作:

self.answer_lineEdit.returnPressed.connect(lambda ans=ex_a: self.ex_evaluator(ans))

对于 functools.partial,应该是这样的:

import functools
callback = partial(self.ex_evaluator, ex_a)
self.answer_lineEdit.returnPressed.connect(callback)

如果你不明白最后一个,你可能想看看documentation

【讨论】:

  • 通过应用 self.ex_a 更改范围有效,将尝试另一种方式似乎我需要开始在更深的水域游泳,顺便说一句,我昨晚在你的博客上添加了书签..在发布问题之前,谢谢你的帮助
  • 没问题。很高兴我能帮忙
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
  • 1970-01-01
  • 2015-03-14
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多