【问题标题】:PyQt button is clicked before runningPyQt 按钮在运行前被点击
【发布时间】:2017-10-09 10:19:02
【问题描述】:

这个简单的应用程序需要在单击按钮后立即执行计算。

运行程序时出现错误:

invalid literal for int() with base 10: ''

在调查我的代码时,我得出的结论是,这可能是由于在程序运行之前单击了按钮操作造成的。因此尝试将空字符串转换为无法完成的 int。

计算是在另一个类中执行的,所以我不知道它为什么要执行计算。

我的问题是如何防止程序在实际运行之前执行点击操作?

class main(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        begin_row = 1
        end_row = 4
        self.setWindowTitle('Rekenprogramma')

        exitAct = QAction(QIcon('exit.png'), '&Exit', self)        
        exitAct.setShortcut('Ctrl+Q')
        exitAct.setStatusTip('Exit application')
        exitAct.triggered.connect(qApp.quit)

        #Defining buttonss
        #Debiet / Flor
        self.lbl = QLabel('Debiet',self)
        self.qle = QLineEdit(self)

        #KV
        self.kvlbl = QLabel("KV",self)
        self.kvle = QLineEdit(self)

        #PressureDrops
        self.pdlbl = QLabel("Pressure Drop", self)
        self.pdle = QLineEdit(self)        

        self.btn = QPushButton('Calculate', self)

        """
        Bulky not relevant code
        """

        #Caclulate Button
        grid.addWidget(self.btn, end_row,1)

        self.btn.clicked.connect(calculations.calculate_kv(int(self.qle.text()), int(self.pdle.text())  ))
        self.show()


class calculations():
# sets parameters for the main application
    def calculate_kv(flow, pressuredrop):
        kv = flow / sqrt(pressuredrop)
        return str(round(kv, 2))

【问题讨论】:

  • 什么是grid
  • 使用这个:self.btn.clicked.connect(lambda : calculations.calculate_kv(int(self.qle.text()), int(self.pdle.text()) ))这会暂时解决问题,但是你还有一个严重的错误,所以如果你没有创建对象,你就创建了widget类。
  • @eyllanesc 网格是一种在 Qt 框架内布局程序的方法。它将空间划分为行和列。就像电子表格一样。例如,您可以查看Zetcode's PyQt 5 教程。

标签: python-3.x pyqt5 qpushbutton


【解决方案1】:

我想通了。通过创建一个新函数,然后调用计算。它消除了一些混乱并提供了解决方案。

         self.btn.clicked.connect(self.calculate)

        self.show()

    def calculate(self):
        answer = calculations.calculate_kv(int(self.qle.text()), int(self.pdle.text())  )
        self.kvle.setText(answer)

class calculations():
# sets parameters for the main application
    def calculate_kv(flow, pressuredrop):
        kv = flow / sqrt(pressuredrop)
        return str(round(kv, 2))

问题是通过将参数传递给

answer = calculations.calculate_kv(arguments)

函数,执行的代码。所以我认为参数的传递不应该在信号传递中完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    相关资源
    最近更新 更多