PyQt5 python中有多个按钮不起作用

2024-04-23 22:55:16 发布

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

我正在用PyQt5制作一个简单的可视化计算器。我还没有真正去真正的计算器部分,因为我有麻烦的按钮。 代码如下:

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QPushButton, QAction, QLineEdit, QMessageBox
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot
class App(QMainWindow):
        def __init__(self):
                super().__init__()
                self.initUI()
        def initUI(self):
                self.setWindowTitle('Calculator')
                self.setGeometry(100, 100, 4000, 1400)
                self.num1= QLineEdit(self)
                self.num1.move(20, 20)
                self.num1.resize(280,40)
                self.num2 = QLineEdit(self)
                self.num2.move(20, 100)
                self.num2.resize(280,40)

                #minus button
                self.minus = QPushButton('-' , self)
                self.minus.move(80,180)
                self.minus.resize(20,40)
                self.minus.clicked.connect(self.minus_onclick)
                self.show()

                #plus button
                self.plus = QPushButton('+' , self)
                self.plus.move(20,180)
                self.plus.resize(20,40)
                self.plus.clicked.connect(self.plus_onclick)
                self.show()

                #* button
                self.into = QPushButton('*' , self)
                self.into.move(140, 180)
                self.into.resize(20, 40)
                self.into.clicked.connect(self.into_onclick)
                self.show()

                 #division button
                self.div = QPushButton('/' , self)
                self.div.move(140, 180)
                self.div.resize(20, 40)
                self.div.clicked.connect(self.div_onclick)
                self.show()

        def plus_onclick(self):
               num1 =int(self.num1.text())
               op = '+'

        def minus_onclick(self):
               num1 =int(self.num1.text())
               op = '-'

        def into_onclick(self):
               num1 =int(self.num1.text())
               op = '*'

        def div_onclick(self):
               num1 =int(self.num1.text())
               op = '/'



if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

然而,问题是只有第一个按钮工作,并显示在屏幕上,无论是哪一个。我做错什么了? 提前谢谢


Tags: importselfdivmovedefbuttonpluspyqt5
1条回答
网友
1楼 · 发布于 2024-04-23 22:55:16

您需要为窗口指定布局并向其中添加小部件:

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QPushButton, QAction, QLineEdit, QMessageBox, \
    QVBoxLayout
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('Calculator')
        self.setGeometry(100, 100, 4000, 1400)

        self.layout = QVBoxLayout(self)
        self.setLayout(self.layout)

        self.num1 = QLineEdit(self)
        self.num1.move(20, 20)
        self.num1.resize(280, 40)
        self.layout.addChildWidget(self.num1)

        self.num2 = QLineEdit(self)
        self.num2.move(20, 100)
        self.num2.resize(280, 40)
        self.layout.addChildWidget(self.num2)

        # minus button
        self.minus = QPushButton('-', self)
        self.minus.move(80, 180)
        self.minus.resize(20, 40)
        self.minus.clicked.connect(self.minus_onclick)
        self.layout.addChildWidget(self.minus)

        # plus button
        self.plus = QPushButton('+', self)
        self.plus.move(20, 180)
        self.plus.resize(20, 40)
        self.plus.clicked.connect(self.plus_onclick)
        self.layout.addChildWidget(self.plus)

        # * button
        self.into = QPushButton('*', self)
        self.into.move(140, 180)
        self.into.resize(20, 40)
        self.into.clicked.connect(self.into_onclick)
        self.layout.addChildWidget(self.into)

        # division button
        self.div = QPushButton('/', self)
        self.div.move(140, 180)
        self.div.resize(20, 40)
        self.div.clicked.connect(self.div_onclick)
        self.layout.addChildWidget(self.div)

    def plus_onclick(self):
        if isinstance(self.num1.text(), int):
            num1 = int(self.num1.text())
            op = '+'

    def minus_onclick(self):
        if isinstance(self.num1.text(), int):
            num1 = int(self.num1.text())
            op = '-'

    def into_onclick(self):
        if isinstance(self.num1.text(), int):
            num1 = int(self.num1.text())
            op = '*'

    def div_onclick(self):
        if isinstance(self.num1.text(), int):
            num1 = int(self.num1.text())
            op = '/'


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()

    sys.exit(app.exec_())

另外,最好在类构造函数外部调用show。你知道吗

希望有帮助。你知道吗

相关问题 更多 >