[python]PyQt5-designer-练手小项目——计算器

问题1:

'mywindow' object has no attribute 'setCentralWidget'

解决方法:

在designer中选择错误,我选择了QMainWindow,需要改为QWights


 

问题2:

local variable 'num' referenced before assignment

 解决办法:

全局变量的使用:在函数外定义一个空的变量。在函数里使用这个变量时申明,这是全局变量

    def xianshi_0(self):
        global Inumber
        Inumber = Inumber + '0'
        print(Inumber)
        self.lineEdit_G.clear()
        self.lineEdit_G.setFocus()
        self.lineEdit_G.setText(Inumber)

 

from PyQt5.QtWidgets import QApplication, QWidget, QMessageBox
from Ui_calculator import Ui_calculator
import random,math
import sys

Inumber = ''
Fnumber = 0
Snumber = 0
Biaozhi = ''

class mywindow(Ui_calculator,QWidget):
    def __init__(self):
        super(mywindow, self).__init__()
        self.setupUi(self)
        self.setWindowTitle('计算器') 
        self.pushButton_0.clicked.connect(self.xianshi_0)
        self.pushButton_1.clicked.connect(self.xianshi_1)
        self.pushButton_2.clicked.connect(self.xianshi_2)
        self.pushButton_3.clicked.connect(self.xianshi_3)
        self.pushButton_4.clicked.connect(self.xianshi_4)
        self.pushButton_5.clicked.connect(self.xianshi_5)
        self.pushButton_6.clicked.connect(self.xianshi_6)
        self.pushButton_7.clicked.connect(self.xianshi_7)
        self.pushButton_8.clicked.connect(self.xianshi_8)
        self.pushButton_9.clicked.connect(self.xianshi_9)
        self.pushButton_JIA.clicked.connect(self.xianshi_JIA)
        self.pushButton_JIAN.clicked.connect(self.xianshi_JIAN)
        self.pushButton_CHENG.clicked.connect(self.xianshi_CHENG)
        self.pushButton_CHU.clicked.connect(self.xianshi_CHU)
        self.pushButton_DENGYU.clicked.connect(self.xianshi_DENGYU)
        self.pushButton.clicked.connect(self.DEL)
        # print(self.num+"1111111")

    # 推出弹窗确认
    def closeEvent(self, event):
        reply = QMessageBox.question(self, '确认', '确认退出吗?', QMessageBox.Yes|QMessageBox.No)
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()
    # 0
    def xianshi_0(self):
        global Inumber
        Inumber = Inumber + '0'
        # print(Inumber)
        self.lineEdit_G.clear()
        self.lineEdit_G.setFocus()
        self.lineEdit_G.setText(Inumber)
    # 1
    def xianshi_1(self):
        global Inumber
        Inumber = Inumber + '1'
        # print(Inumber)
        self.lineEdit_G.clear()
        self.lineEdit_G.setFocus()
        self.lineEdit_G.setText(Inumber)
   
    # 2
    def xianshi_2(self):
        global Inumber
        Inumber = Inumber + '2'
        # print(Inumber)
        self.lineEdit_G.clear()
        self.lineEdit_G.setFocus()
        self.lineEdit_G.setText(Inumber)

    # 3
    def xianshi_3(self):
        global Inumber
        Inumber = Inumber + '3'
        # print(Inumber)
        self.lineEdit_G.clear()
        self.lineEdit_G.setFocus()
        self.lineEdit_G.setText(Inumber)

    # 4
    def xianshi_4(self):
        global Inumber
        Inumber = Inumber + '4'
        # print(Inumber)
        self.lineEdit_G.clear()
        self.lineEdit_G.setFocus()
        self.lineEdit_G.setText(Inumber)
   
    # 5
    def xianshi_5(self):
        global Inumber
        Inumber = Inumber + '5'
        # print(Inumber)
        self.lineEdit_G.clear()
        self.lineEdit_G.setFocus()
        self.lineEdit_G.setText(Inumber)

    # 6
    def xianshi_6(self):
        global Inumber
        Inumber = Inumber + '6'
        # print(Inumber)
        self.lineEdit_G.clear()
        self.lineEdit_G.setFocus()
        self.lineEdit_G.setText(Inumber)

    # 7
    def xianshi_7(self):
        global Inumber
        Inumber = Inumber + '7'
        # print(Inumber)
        self.lineEdit_G.clear()
        self.lineEdit_G.setFocus()
        self.lineEdit_G.setText(Inumber)
   
    # 8
    def xianshi_8(self):
        global Inumber
        Inumber = Inumber + '8'
        # print(Inumber)
        self.lineEdit_G.clear()
        self.lineEdit_G.setFocus()
        self.lineEdit_G.setText(Inumber)

    # 9
    def xianshi_9(self):
        global Inumber
        Inumber = Inumber + '9'
        # print(Inumber)
        self.lineEdit_G.clear()
        self.lineEdit_G.setFocus()
        self.lineEdit_G.setText(Inumber)

    def xianshi_JIA(self):
        global Inumber
        global Fnumber
        global Biaozhi
        Biaozhi = '+'
        if Inumber == '':
            Fnumber = 0
            Inumber = '0'
        else:
            Fnumber = int(Inumber)
        Inumber = ''
        self.lineEdit_G.clear()
        # self.lineEdit_G.clear()
        # self.lineEdit_G.setFocus()
        # self.lineEdit_A.setText(str(Fnumber))
        # print(Fnumber)
        # print(Inumber)

    def xianshi_JIAN(self):
        global Inumber
        global Fnumber
        global Biaozhi
        Biaozhi = '-'
        if Inumber == '':
            Fnumber = 0
            Inumber = '0'
        else:
            Fnumber = int(Inumber)
        Inumber = ''
        self.lineEdit_G.clear()

    def xianshi_CHENG(self):
        global Inumber
        global Fnumber
        global Biaozhi
        Biaozhi = '*'
        if Inumber == '':
            Fnumber = 0
            Inumber = '0'
        else:
            Fnumber = int(Inumber)
        Inumber = ''
        self.lineEdit_G.clear()        

    def xianshi_CHU(self):
        global Inumber
        global Fnumber
        global Biaozhi
        Biaozhi = '/'
        if Inumber == '':
            Fnumber = 0
            Inumber = '0'
        else:
            Fnumber = int(Inumber)
        Inumber = ''
        self.lineEdit_G.clear()


    def xianshi_DENGYU(self):
        global Inumber
        global Fnumber
        global Snumber
        global Biaozhi
        # print(Fnumber,Inumber)
        self.lineEdit_G.clear()
        if Snumber == 0:
            if Biaozhi == '+':
                Snumber = Fnumber + int(Inumber)
            elif Biaozhi == '-':
                Snumber = Fnumber - int(Inumber)
            elif Biaozhi == '*':
                Snumber = Fnumber * int(Inumber)
            elif Biaozhi == '/':
                Snumber = Fnumber / int(Inumber)
            self.lineEdit_A.setText(str(Snumber))
        else:
            if Biaozhi == '+':
                Snumber = Snumber + int(Inumber)
            elif Biaozhi == '-':
                Snumber = Snumber - int(Inumber)
            elif Biaozhi == '*':
                Snumber = Snumber * int(Inumber)
            elif Biaozhi == '/':
                Snumber = Snumber / int(Inumber)
            self.lineEdit_A.setText(str(Snumber))
            
        Inumber = Snumber
        Fnumber = 0
        Biaozhi = ''

    def DEL(self):
        global Inumber
        global Fnumber
        global Snumber
        global Biaozhi
        Inumber = ''
        Fnumber = 0
        Snumber = 0
        Biaozhi = ''
        self.lineEdit_G.clear()
        self.lineEdit_A.clear()



if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = mywindow()
    w.show()
    sys.exit(app.exec_())

UI:

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_calculator(object):
    def setupUi(self, calculator):
        calculator.setObjectName("calculator")
        calculator.resize(443, 477)
        self.widget = QtWidgets.QWidget(calculator)
        self.widget.setGeometry(QtCore.QRect(20, 20, 415, 448))
        self.widget.setObjectName("widget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.gridLayout_2 = QtWidgets.QGridLayout()
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.label = QtWidgets.QLabel(self.widget)
        self.label.setObjectName("label")
        self.gridLayout_2.addWidget(self.label, 1, 0, 1, 1)
        self.lineEdit_A = QtWidgets.QLineEdit(self.widget)
        self.lineEdit_A.setMinimumSize(QtCore.QSize(0, 50))
        self.lineEdit_A.setObjectName("lineEdit_A")
        self.gridLayout_2.addWidget(self.lineEdit_A, 1, 1, 1, 2)
        self.lineEdit_G = QtWidgets.QLineEdit(self.widget)
        self.lineEdit_G.setMinimumSize(QtCore.QSize(0, 50))
        self.lineEdit_G.setObjectName("lineEdit_G")
        self.gridLayout_2.addWidget(self.lineEdit_G, 0, 0, 1, 3)
        self.verticalLayout.addLayout(self.gridLayout_2)
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setObjectName("gridLayout")
        self.pushButton_0 = QtWidgets.QPushButton(self.widget)
        self.pushButton_0.setMinimumSize(QtCore.QSize(0, 50))
        self.pushButton_0.setObjectName("pushButton_0")
        self.gridLayout.addWidget(self.pushButton_0, 3, 2, 1, 1)
        self.pushButton_3 = QtWidgets.QPushButton(self.widget)
        self.pushButton_3.setMinimumSize(QtCore.QSize(0, 50))
        self.pushButton_3.setObjectName("pushButton_3")
        self.gridLayout.addWidget(self.pushButton_3, 2, 2, 1, 1)
        self.pushButton_6 = QtWidgets.QPushButton(self.widget)
        self.pushButton_6.setMinimumSize(QtCore.QSize(0, 50))
        self.pushButton_6.setObjectName("pushButton_6")
        self.gridLayout.addWidget(self.pushButton_6, 1, 2, 1, 1)
        self.pushButton_JIAN = QtWidgets.QPushButton(self.widget)
        self.pushButton_JIAN.setMinimumSize(QtCore.QSize(0, 50))
        self.pushButton_JIAN.setObjectName("pushButton_JIAN")
        self.gridLayout.addWidget(self.pushButton_JIAN, 3, 1, 1, 1)
        self.pushButton_4 = QtWidgets.QPushButton(self.widget)
        self.pushButton_4.setMinimumSize(QtCore.QSize(0, 50))
        self.pushButton_4.setObjectName("pushButton_4")
        self.gridLayout.addWidget(self.pushButton_4, 1, 0, 1, 1)
        self.pushButton_7 = QtWidgets.QPushButton(self.widget)
        self.pushButton_7.setMinimumSize(QtCore.QSize(0, 50))
        self.pushButton_7.setObjectName("pushButton_7")
        self.gridLayout.addWidget(self.pushButton_7, 0, 0, 1, 1)
        self.pushButton_9 = QtWidgets.QPushButton(self.widget)
        self.pushButton_9.setMinimumSize(QtCore.QSize(0, 50))
        self.pushButton_9.setObjectName("pushButton_9")
        self.gridLayout.addWidget(self.pushButton_9, 0, 2, 1, 1)
        self.pushButton_1 = QtWidgets.QPushButton(self.widget)
        self.pushButton_1.setMinimumSize(QtCore.QSize(0, 50))
        self.pushButton_1.setObjectName("pushButton_1")
        self.gridLayout.addWidget(self.pushButton_1, 2, 0, 1, 1)
        self.pushButton_CHU = QtWidgets.QPushButton(self.widget)
        self.pushButton_CHU.setMinimumSize(QtCore.QSize(0, 50))
        self.pushButton_CHU.setObjectName("pushButton_CHU")
        self.gridLayout.addWidget(self.pushButton_CHU, 4, 1, 1, 1)
        self.pushButton_8 = QtWidgets.QPushButton(self.widget)
        self.pushButton_8.setMinimumSize(QtCore.QSize(0, 50))
        self.pushButton_8.setObjectName("pushButton_8")
        self.gridLayout.addWidget(self.pushButton_8, 0, 1, 1, 1)
        self.pushButton_CHENG = QtWidgets.QPushButton(self.widget)
        self.pushButton_CHENG.setMinimumSize(QtCore.QSize(0, 50))
        self.pushButton_CHENG.setObjectName("pushButton_CHENG")
        self.gridLayout.addWidget(self.pushButton_CHENG, 4, 0, 1, 1)
        self.pushButton_2 = QtWidgets.QPushButton(self.widget)
        self.pushButton_2.setMinimumSize(QtCore.QSize(0, 50))
        self.pushButton_2.setObjectName("pushButton_2")
        self.gridLayout.addWidget(self.pushButton_2, 2, 1, 1, 1)
        self.pushButton_5 = QtWidgets.QPushButton(self.widget)
        self.pushButton_5.setMinimumSize(QtCore.QSize(0, 50))
        self.pushButton_5.setObjectName("pushButton_5")
        self.gridLayout.addWidget(self.pushButton_5, 1, 1, 1, 1)
        self.pushButton_JIA = QtWidgets.QPushButton(self.widget)
        self.pushButton_JIA.setMinimumSize(QtCore.QSize(0, 50))
        self.pushButton_JIA.setObjectName("pushButton_JIA")
        self.gridLayout.addWidget(self.pushButton_JIA, 3, 0, 1, 1)
        self.pushButton = QtWidgets.QPushButton(self.widget)
        self.pushButton.setMinimumSize(QtCore.QSize(0, 50))
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 4, 2, 1, 1)
        self.pushButton_DENGYU = QtWidgets.QPushButton(self.widget)
        self.pushButton_DENGYU.setMinimumSize(QtCore.QSize(0, 50))
        self.pushButton_DENGYU.setObjectName("pushButton_DENGYU")
        self.gridLayout.addWidget(self.pushButton_DENGYU, 5, 0, 1, 3)
        self.verticalLayout.addLayout(self.gridLayout)

        self.retranslateUi(calculator)
        QtCore.QMetaObject.connectSlotsByName(calculator)

    def retranslateUi(self, calculator):
        _translate = QtCore.QCoreApplication.translate
        calculator.setWindowTitle(_translate("calculator", "计算器"))
        self.label.setText(_translate("calculator", "<html><head/><body><p align=\"center\"><span style=\" font-size:18pt; font-weight:600;\">=</span></p></body></html>"))
        self.pushButton_0.setText(_translate("calculator", "0"))
        self.pushButton_3.setText(_translate("calculator", "3"))
        self.pushButton_6.setText(_translate("calculator", "6"))
        self.pushButton_JIAN.setText(_translate("calculator", "-"))
        self.pushButton_4.setText(_translate("calculator", "4"))
        self.pushButton_7.setText(_translate("calculator", "7"))
        self.pushButton_9.setText(_translate("calculator", "9"))
        self.pushButton_1.setText(_translate("calculator", "1"))
        self.pushButton_CHU.setText(_translate("calculator", "/"))
        self.pushButton_8.setText(_translate("calculator", "8"))
        self.pushButton_CHENG.setText(_translate("calculator", "*"))
        self.pushButton_2.setText(_translate("calculator", "2"))
        self.pushButton_5.setText(_translate("calculator", "5"))
        self.pushButton_JIA.setText(_translate("calculator", "+"))
        self.pushButton.setText(_translate("calculator", "DEL"))
        self.pushButton_DENGYU.setText(_translate("calculator", "="))

 

  

 

 

posted on 2020-03-16 15:23  dandanduba  阅读(662)  评论(0编辑  收藏  举报

导航