这是我要实现简单表达式评估器的类:
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"
在上述用于简单算术练习应用程序的代码中,我使用两行显示一定范围内的随机数,第三条
QlineEdit
即answer_lineEdit
用来获取用户输入,然后检查其是否正确,我使用了Signal
returnPressed
并将其连接到ex_evaluator
,然后它将告诉您是否给出了正确的响应,问题似乎是我无法将ex_a
参数传递给该函数以对其进行评估,这可能是名称空间问题,我是编码方面的新手,我的理念是仅学习最少的知识,以使自己到达所需的位置,所以我想知道是否必须学习如何对QLineEdit
进行子类化我不知道该怎么做,我看到装饰师可能会帮上忙,这是我不想陷入的另一麻烦。 最佳答案
您需要执行以下操作之一:
通过将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。
关于python - 连接到插槽时如何向Qt PySide内置信号添加参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16050108/