• Python _PyQt5 【总】


    http://www.cnblogs.com/archisama/p/5442071.html

    • QtCore
    • QtGui
    • QtWidgets
    • QtMultimedia
    • QtBluetooth
    • QtNetwork
    • QtPositioning
    • Enginio
    • QtWebSockets
    • QtWebKit
    • QtWebKitWidgets
    • QtXml
    • QtSvg
    • QtSql
    • QtTest
      1 import sys
      2 from PyQt5.QtWidgets import QApplication,QWidget,QHBoxLayout,QVBoxLayout,QSlider
      3 from PyQt5.QtGui import QPainter,QColor,QFont,QPen,QBrush
      4 from PyQt5.QtCore import QObject,pyqtSignal,Qt
      5 
      6 #自定义信号
      7 class mySignal(QObject):
      8     mysignal=pyqtSignal(int)
      9 #自定义烧录组件
     10 class myWidget(QWidget):
     11     def __init__(self):
     12         super().__init__()
     13         #定义默认属性
     14         self.value=75
     15         self.__num=[75,150,225,300,375,450,525,600,675]
     16         #界面显示委托给initUI
     17         self.initUI()
     18     def initUI(self):
     19         self.setMinimumSize(75,30)
     20     #定义属性设置方法 在此处用来设置value属性
     21     def setValue(self,value):
     22         self.value=value
     23         #可以根据情况使用重绘方法
     24         self.repaint()
     25     #组件界面绘制
     26     def paintEvent(self, e):
     27         #计算基础绘制数据
     28         size=self.size()#获取当前组件的尺寸属性
     29         w=size.width()#获取当前组件的宽度
     30         h=size.height()  # 获取当前组件的高度
     31         full=int(round(w/750*700))#full为最大刻录数据
     32         till=int(round(w/750*self.value))#till为实际刻录数据
     33         step=int(round(w/10))#计算刻度单位长度
     34         p=QPainter()#定义绘图接口对象
     35         p.begin(self)
     36         #绘制底部色块
     37         #1、绘制黄色块
     38         pen=QPen(QColor(255,255,255),1,Qt.SolidLine)
     39         brush=QBrush(QColor(254,254,180))
     40         if till>=full:
     41             p.setPen(pen)
     42             p.setBrush(brush)
     43             p.drawRect(0,0,full,h)
     44             #以下部分更换画刷绘制烧毁色块
     45             brush = QBrush(QColor(255,0,0))
     46             p.setBrush(brush)
     47             p.drawRect(full, 0, till-full, h)
     48         else:
     49             p.setPen(pen)
     50             p.setBrush(brush)
     51             p.drawRect(0, 0, till, h)
     52         #以下绘制边框
     53         pen = QPen(QColor(25, 25, 25), 1, Qt.SolidLine)
     54         brush = QBrush(Qt.NoBrush)
     55         p.setPen(pen)
     56         p.setBrush(brush)
     57         p.drawRect(0, 0, w-1, h-1)
     58         #以下绘制刻度及文字
     59         j=0#定义刻度索引值
     60         font=QFont('微软雅黑',7,QFont.Light)#定义字体
     61         p.setFont(font)#设置绘制字体
     62         for i in range(step,10*step,step):
     63             p.drawLine(i,0,i,5)
     64             m=p.fontMetrics()
     65             fw=m.width(str(self.__num[j]))
     66             p.drawText(i-fw/2,h/2,str(self.__num[j]))
     67             j+=1
     68 #自定组件使用示例
     69 class myWin(QWidget):
     70     def __init__(self):
     71         super().__init__()
     72         self.initUI()
     73 
     74     def initUI(self):
     75         #自定组件实例化(使用)
     76         self.wid=myWidget()
     77         self.c=mySignal()#实例化自定义信号类
     78         self.s=QSlider(Qt.Horizontal,self)
     79         self.s.setRange(1,750)#设置滑块的取值范围
     80         self.c.mysignal[int].connect(self.wid.setValue)
     81         self.s.valueChanged[int].connect(self.wid.setValue)
     82 
     83         #布局
     84         hbox=QHBoxLayout()
     85         hbox.addWidget(self.wid)
     86         vbox=QVBoxLayout()
     87         vbox.addWidget(self.s)
     88         vbox.addStretch(1)
     89         vbox.addLayout(hbox)
     90 
     91         self.setLayout(vbox)
     92         self.setGeometry(100,100,400,300)
     93         self.setWindowTitle('自定义控件使用')
     94         self.show()
     95 
     96     def valueChange(self,value):
     97         self.c.mysignal.emit(value)
     98         self.wid.repaint()
     99 if __name__ == '__main__':
    100 
    101     app = QApplication(sys.argv)
    102     ex = myWin()
    103     sys.exit(app.exec_())
    PyQt5自定义烧录组件

    俄罗斯方块

    """
    俄罗斯方块
     
    author: wolfstar
    last edited: 2018年1月
    """
    import sys, random
    from PyQt5.QtWidgets import QMainWindow, QFrame, QDesktopWidget, QApplication
    from PyQt5.QtCore import Qt, QBasicTimer, pyqtSignal
    from PyQt5.QtGui import QPainter, QColor
     
    #主界面类 
    class Tetris(QMainWindow):
        def __init__(self):
            super().__init__()
     
            self.initUI()
     
        def initUI(self):
            #Board创建一个面板类的实例,并设置应用程序的核心部件。
            self.tboard = Board(self)
            self.setCentralWidget(self.tboard)
            #创建一个状态栏将显示消息。我们将显示三种可能的消息:已删除的行数,停顿了一下消息,或游戏结束的消息。msg2Statusbar是一个自定义的信号,在Board 中实现类。showMessage()是一个内置的方法,在状态栏显示一条消息。 
            self.statusbar = self.statusBar()
            self.tboard.msg2Statusbar[str].connect(self.statusbar.showMessage)
            #这一行代码启动游戏
            self.tboard.start()
     
            self.resize(180, 380)
            self.center()
            self.setWindowTitle('Tetris')
            self.show()
        #窗体居中显示方法 
        def center(self):
            screen = QDesktopWidget().screenGeometry()
            size = self.geometry()
            self.move((screen.width() - size.width()) / 2,
                      (screen.height() - size.height()) / 2)
     
    #创建面板类
    class Board(QFrame):
        #创建一个自定义的信号。当我们想写一个信息或状态栏的分数的时候,msg2Statusbar发出一个信号
        msg2Statusbar = pyqtSignal(str)
        #这些都是Board的类变量。BoardWidth和BoardHeight定义的块的大小。Speed定义了游戏的速度。每个300 ms将开始一个新游戏循环。
        BoardWidth = 10
        BoardHeight = 22
        Speed = 300
     
        def __init__(self, parent):
            super().__init__(parent)
     
            self.initBoard()
        #我们在initBoard()方法初始化一些重要的变量。board变量是一个从0到7的数字列表。它代表了面板上各种形状和位置。
        def initBoard(self):
            
            self.timer = QBasicTimer()
            self.isWaitingAfterLine = False
     
            self.curX = 0
            self.curY = 0
            self.numLinesRemoved = 0
            self.board = []
     
            self.setFocusPolicy(Qt.StrongFocus)
            self.isStarted = False
            self.isPaused = False
            self.clearBoard()
     
        #shapeAt()方法确定在给定形状块的类型。
        def shapeAt(self, x, y):
            return self.board[(y * Board.BoardWidth) + x]
        
        def setShapeAt(self, x, y, shape):
            self.board[(y * Board.BoardWidth) + x] = shape
        #Board可以动态地调整大小。因此,块的大小可能会有所改变。squareWidth()计算单一方块像素的宽度并返回它。Board.BoardWidth方块板的大小。
        def squareWidth(self):
            return self.contentsRect().width() // Board.BoardWidth
     
        def squareHeight(self):
            return self.contentsRect().height() // Board.BoardHeight
        #游戏开始方法
        def start(self):
     
            if self.isPaused:
                return
     
            self.isStarted = True
            self.isWaitingAfterLine = False
            self.numLinesRemoved = 0
            self.clearBoard()
     
            self.msg2Statusbar.emit(str(self.numLinesRemoved))
     
            self.newPiece()
            self.timer.start(Board.Speed, self)
        #游戏暂停方法
        def pause(self):
     
            if not self.isStarted:
                return
     
            self.isPaused = not self.isPaused
     
            if self.isPaused:
                self.timer.stop()
                self.msg2Statusbar.emit("paused")
     
            else:
                self.timer.start(Board.Speed, self)
                self.msg2Statusbar.emit(str(self.numLinesRemoved))
     
            self.update()
        #窗体绘图
        def paintEvent(self, event):
     
            painter = QPainter(self)
            #根据窗体舞台大小计算顶部
            rect = self.contentsRect()
     
            boardTop = rect.bottom() - Board.BoardHeight * self.squareHeight()
            #游戏的绘制分为两个步骤,第一步,绘制所有方块,这些方块都要保存在底部列表中。列表通过shapeAt() 方法来添加方块。
            for i in range(Board.BoardHeight):
                for j in range(Board.BoardWidth):
                    shape = self.shapeAt(j, Board.BoardHeight - i - 1)
     
                    if shape != Tetrominoe.NoShape:
                        self.drawSquare(painter,
                                        rect.left() + j * self.squareWidth(),
                                        boardTop + i * self.squareHeight(), shape)
            #第二步绘制下降中的方块
            if self.curPiece.shape() != Tetrominoe.NoShape:
     
                for i in range(4):
                    x = self.curX + self.curPiece.x(i)
                    y = self.curY - self.curPiece.y(i)
                    self.drawSquare(painter, rect.left() + x * self.squareWidth(),
                                    boardTop + (Board.BoardHeight - y - 1) * self.squareHeight(),
                                    self.curPiece.shape())
     
        def keyPressEvent(self, event):
     
            if not self.isStarted or self.curPiece.shape() == Tetrominoe.NoShape:
                super(Board, self).keyPressEvent(event)
                return
     
            key = event.key()
     
            if key == Qt.Key_P:
                self.pause()
                return
     
            if self.isPaused:
                return
            #keyPressEvent()方法检查按下键。当按右箭头键,我们试图向右移动一块。我们使用tyrMove,因为可能无法移动。
            elif key == Qt.Key_Left:
                self.tryMove(self.curPiece, self.curX - 1, self.curY)
     
            elif key == Qt.Key_Right:
                self.tryMove(self.curPiece, self.curX + 1, self.curY)
            #向上箭头键将旋转方块。
            elif key == Qt.Key_Down:
                self.tryMove(self.curPiece.rotateRight(), self.curX, self.curY)
     
            elif key == Qt.Key_Up:
                self.tryMove(self.curPiece.rotateLeft(), self.curX, self.curY)
            #空格键立即下降到底部
            elif key == Qt.Key_Space:
                self.dropDown()
            #按下D键,可以加速下降。
            elif key == Qt.Key_D:
                self.oneLineDown()
     
            else:
                super(Board, self).keyPressEvent(event)
        #计时器事件,当我们前一个方块降到底部后,创建一个新的方块。
        def timerEvent(self, event):
     
            if event.timerId() == self.timer.timerId():
     
                if self.isWaitingAfterLine:
                    self.isWaitingAfterLine = False
                    self.newPiece()
                else:
                    self.oneLineDown()
     
            else:
                super(Board, self).timerEvent(event)
        #clearBoard()方法通过设置Tetrominoe.NoShape清除面板
        def clearBoard(self):
     
            for i in range(Board.BoardHeight * Board.BoardWidth):
                self.board.append(Tetrominoe.NoShape)
     
        def dropDown(self):
     
            newY = self.curY
     
            while newY > 0:
     
                if not self.tryMove(self.curPiece, self.curX, newY - 1):
                    break
     
                newY -= 1
     
            self.pieceDropped()
     
        def oneLineDown(self):
     
            if not self.tryMove(self.curPiece, self.curX, self.curY - 1):
                self.pieceDropped()
     
        def pieceDropped(self):
     
            for i in range(4):
                x = self.curX + self.curPiece.x(i)
                y = self.curY - self.curPiece.y(i)
                self.setShapeAt(x, y, self.curPiece.shape())
     
            self.removeFullLines()
     
            if not self.isWaitingAfterLine:
                self.newPiece()
        #如果到达底部,会调用removeFullLines()方法。我们会检查所有完整的线条然后删除它们。然后移动所有行高于当前删除整行一行。请注意,我们反的顺序行被删除。否则,就会出错。
        def removeFullLines(self):
     
            numFullLines = 0
            rowsToRemove = []
     
            for i in range(Board.BoardHeight):
     
                n = 0
                for j in range(Board.BoardWidth):
                    if not self.shapeAt(j, i) == Tetrominoe.NoShape:
                        n = n + 1
     
                if n == 10:
                    rowsToRemove.append(i)
     
            rowsToRemove.reverse()
     
            for m in rowsToRemove:
     
                for k in range(m, Board.BoardHeight):
                    for l in range(Board.BoardWidth):
                        self.setShapeAt(l, k, self.shapeAt(l, k + 1))
     
            numFullLines = numFullLines + len(rowsToRemove)
     
            if numFullLines > 0:
                self.numLinesRemoved = self.numLinesRemoved + numFullLines
                self.msg2Statusbar.emit(str(self.numLinesRemoved))
     
                self.isWaitingAfterLine = True
                self.curPiece.setShape(Tetrominoe.NoShape)
                self.update()
        #通过newPiece()方法创建一个新的方块,如果不能进入它的初始位置,游戏就结束了。
        def newPiece(self):
     
            self.curPiece = Shape()
            self.curPiece.setRandomShape()
            self.curX = Board.BoardWidth // 2 + 1
            self.curY = Board.BoardHeight - 1 + self.curPiece.minY()
     
            if not self.tryMove(self.curPiece, self.curX, self.curY):
                self.curPiece.setShape(Tetrominoe.NoShape)
                self.timer.stop()
                self.isStarted = False
                self.msg2Statusbar.emit("Game over")
        #使用tryMove()方法尝试移动方块。如果方块的边缘已经接触到面板边缘或者不能移动,我们返回False。否则我们当前块下降到一个新的位置。
        def tryMove(self, newPiece, newX, newY):
     
            for i in range(4):
     
                x = newX + newPiece.x(i)
                y = newY - newPiece.y(i)
     
                if x < 0 or x >= Board.BoardWidth or y < 0 or y >= Board.BoardHeight:
                    return False
     
                if self.shapeAt(x, y) != Tetrominoe.NoShape:
                    return False
     
            self.curPiece = newPiece
            self.curX = newX
            self.curY = newY
            self.update()
     
            return True
     
        def drawSquare(self, painter, x, y, shape):
     
            colorTable = [0x000000, 0xCC6666, 0x66CC66, 0x6666CC,
                          0xCCCC66, 0xCC66CC, 0x66CCCC, 0xDAAA00]
     
            color = QColor(colorTable[shape])
            painter.fillRect(x + 1, y + 1, self.squareWidth() - 2,
                             self.squareHeight() - 2, color)
     
            painter.setPen(color.lighter())
            painter.drawLine(x, y + self.squareHeight() - 1, x, y)
            painter.drawLine(x, y, x + self.squareWidth() - 1, y)
     
            painter.setPen(color.darker())
            painter.drawLine(x + 1, y + self.squareHeight() - 1,
                             x + self.squareWidth() - 1, y + self.squareHeight() - 1)
            painter.drawLine(x + self.squareWidth() - 1,
                             y + self.squareHeight() - 1, x + self.squareWidth() - 1, y + 1)
     
    #Tetrominoe类包含所有可能的形状。NoShape空形状。
    class Tetrominoe(object):
        NoShape = 0
        ZShape = 1
        SShape = 2
        LineShape = 3
        TShape = 4
        SquareShape = 5
        LShape = 6
        MirroredLShape = 7
     
    #Shape 类保存方块信息  
    class Shape(object):
        #coordsTable 元组包含所有可能的俄罗斯方块的坐标值。这是一个模板的所有块坐标值。
        coordsTable = (
            ((0, 0), (0, 0), (0, 0), (0, 0)),
            ((0, -1), (0, 0), (-1, 0), (-1, 1)),
            ((0, -1), (0, 0), (1, 0), (1, 1)),
            ((0, -1), (0, 0), (0, 1), (0, 2)),
            ((-1, 0), (0, 0), (1, 0), (0, 1)),
            ((0, 0), (1, 0), (0, 1), (1, 1)),
            ((-1, -1), (0, -1), (0, 0), (0, 1)),
            ((1, -1), (0, -1), (0, 0), (0, 1))
        )
     
        def __init__(self):
     
            self.coords = [[0, 0] for i in range(4)]
            self.pieceShape = Tetrominoe.NoShape
     
            self.setShape(Tetrominoe.NoShape)
     
        def shape(self):
            return self.pieceShape
     
        def setShape(self, shape):
     
            table = Shape.coordsTable[shape]
     
            for i in range(4):
                for j in range(2):
                    self.coords[i][j] = table[i][j]
     
            self.pieceShape = shape
     
        def setRandomShape(self):
            self.setShape(random.randint(1, 7))
     
        def x(self, index):
            return self.coords[index][0]
     
        def y(self, index):
            return self.coords[index][1]
     
        def setX(self, index, x):
            self.coords[index][0] = x
     
        def setY(self, index, y):
            self.coords[index][1] = y
     
        def minX(self):
     
            m = self.coords[0][0]
            for i in range(4):
                m = min(m, self.coords[i][0])
     
            return m
     
        def maxX(self):
     
            m = self.coords[0][0]
            for i in range(4):
                m = max(m, self.coords[i][0])
     
            return m
     
        def minY(self):
     
            m = self.coords[0][1]
            for i in range(4):
                m = min(m, self.coords[i][1])
     
            return m
     
        def maxY(self):
     
            m = self.coords[0][1]
            for i in range(4):
                m = max(m, self.coords[i][1])
     
            return m
        #rotateLeft() 向左旋转方块。如果方块本身不能被旋转,我们就返回当前对象的应用。否则就创建一个新的块及其坐标设置为的旋转。
        def rotateLeft(self):
     
            if self.pieceShape == Tetrominoe.SquareShape:
                return self
     
            result = Shape()
            result.pieceShape = self.pieceShape
     
            for i in range(4):
                result.setX(i, self.y(i))
                result.setY(i, -self.x(i))
     
            return result
     
        def rotateRight(self):
     
            if self.pieceShape == Tetrominoe.SquareShape:
                return self
     
            result = Shape()
            result.pieceShape = self.pieceShape
     
            for i in range(4):
                result.setX(i, -self.y(i))
                result.setY(i, self.x(i))
     
            return result
     
     
    if __name__ == '__main__':
        app = QApplication([])
        tetris = Tetris()
        sys.exit(app.exec_())
    俄罗斯方块-能运行

    计算器

    #!/usr/bin/env python
    # -*- coding:UTF-8 -*-
    # calculator
    
    import sys
    
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    
    
    class UI_form(QWidget):
        def __init__(self,parent = None):
                 QWidget.__init__(self)
    
                 self.setWindowTitle('UI')
    
                 grid = QGridLayout() #网格式布局
                 global lcd
                 lcd = QTextBrowser()
                 lcd.setFixedHeight(90)
                 lcd.setFont(QFont("Microsoft YaHei", 20))
                 lcd.setText('0'.decode('utf-8'))
                 grid.setSpacing(0)
                 grid.addWidget(lcd, 0, 0, 1, 5)
    
        # ---------------------按钮定义及显示-------------------------
    
                 button_0 = QPushButton('0')
                 grid.addWidget(button_0,5,0)
    
                 button_1 = QPushButton('1')
                 grid.addWidget(button_1,4,0)
    
                 button_2 = QPushButton('2')
                 grid.addWidget(button_2,4,1)
    
                 button_3 = QPushButton('3')
                 grid.addWidget(button_3,4,2)
    
                 button_4 = QPushButton('4')
                 grid.addWidget(button_4,3,0)
    
                 button_5 = QPushButton('5')
                 grid.addWidget(button_5,3,1)
    
                 button_6 = QPushButton('6')
                 grid.addWidget(button_6,3,2)
    
                 button_7 = QPushButton('7')
                 grid.addWidget(button_7,2,0)
    
                 button_8 = QPushButton('8')
                 grid.addWidget(button_8,2,1)
    
                 button_9 = QPushButton('9')
                 grid.addWidget(button_9,2,2)
    
                 button_plus = QPushButton('+')
                 grid.addWidget(button_plus,2,3)
    
                 button_dec = QPushButton('-')
                 grid.addWidget(button_dec,3,3)
    
                 button_mul = QPushButton('*')
                 grid.addWidget(button_mul,4,3)
    
                 button_dev = QPushButton('/')
                 grid.addWidget(button_dev,5,3)
    
                 button_eq = QPushButton('=')
                 grid.addWidget(button_eq,5,2)
    
                 button_point = QPushButton('.')
                 grid.addWidget(button_point,5,1)
    
                 button_close = QPushButton('Close')
                 grid.addWidget(button_close,1,0)
    
                 button_clear = QPushButton('Clear')
                 grid.addWidget(button_clear,1,1)
    
                 button_blk = QPushButton('Blk')
                 grid.addWidget(button_blk,1,2)
    
    #--------------------------------------------------
    
                 self.setLayout(grid)
                 self.resize(350, 300)
    
                 self.str1 = ''#接收第一个要运算的数
                 self.str2 = ''#接收第二个要运算的数
                 self.flag = '0'
                 self.calFlag = ''
                 lcd.setText(self.str1)
    
                 #数字键事件处理
                 QObject.connect(button_7,SIGNAL("clicked()"),self.func_button7)
                 QObject.connect(button_8,SIGNAL("clicked()"),self.func_button8)
                 QObject.connect(button_9,SIGNAL("clicked()"),self.func_button9)
                 QObject.connect(button_4,SIGNAL("clicked()"),self.func_button4)
                 QObject.connect(button_5,SIGNAL("clicked()"),self.func_button5)
                 QObject.connect(button_6,SIGNAL("clicked()"),self.func_button6)
                 QObject.connect(button_1,SIGNAL("clicked()"),self.func_button1)
                 QObject.connect(button_2,SIGNAL("clicked()"),self.func_button2)
                 QObject.connect(button_3,SIGNAL("clicked()"),self.func_button3)
                 QObject.connect(button_0,SIGNAL("clicked()"),self.func_button0)
                 #运算符按键事件处理
                 QObject.connect(button_plus,SIGNAL("clicked()"),self.func_buttonAdd)
                 QObject.connect(button_dec,SIGNAL("clicked()"),self.func_buttonDec)
                 QObject.connect(button_mul,SIGNAL("clicked()"),self.func_buttonMul)
                 QObject.connect(button_dev,SIGNAL("clicked()"),self.func_buttonChu)
                 QObject.connect(button_eq,SIGNAL("clicked()"),self.func_buttonEqual)
                 QObject.connect(button_clear,SIGNAL("clicked()"),self.func_buttonClear)
        def closeEvent(self,event):#窗口关闭时的处理,只实现这个函数就可以,不用去调用
            reply = QMessageBox.question(self,'Message',"Are you sure to quit?",QMessageBox.Yes,QMessageBox.No)
            if reply == QMessageBox.Yes:
                event.accept()
            else:
                event.ignore()
        def func_button7(self):
    
            if self.flag == '1':
                self.str2 = self.str2 + '7'
                lcd.setText(self.str2)
            else:
                self.str1 = self.str1 + '7'
                lcd.setText(self.str1)
        def func_button8(self):
            if self.flag == '1':
                self.str2 = self.str2 + '8'
                lcd.setText(self.str2)
            else:
                self.str1 = self.str1 + '8'
                lcd.setText(self.str1)
        def func_button9(self):
            if self.flag == '1':
                self.str2 = self.str2 + '9'
                lcd.setText(self.str2)
            else:
                self.str1 = self.str1 + '9'
                lcd.setText(self.str1)
        def func_button4(self):
            if self.flag == '1':
                self.str2 = self.str2 + '4'
                lcd.setText(self.str2)
            else:
                self.str1 = self.str1 + '4'
                lcd.setText(self.str1)
        def func_button5(self):
            if self.flag == '1':
                self.str2 = self.str2 + '5'
                lcd.setText(self.str2)
            else:
                self.str1 = self.str1 + '5'
                lcd.setText(self.str1)
        def func_button6(self):
            if self.flag == '1':
                self.str2 = self.str2 + '6'
                lcd.setText(self.str2)
            else:
                self.str1 = self.str1 + '6'
                lcd.setText(self.str1)
        def func_button1(self):
            if self.flag == '1':
                self.str2 = self.str2 + '1'
                lcd.setText(self.str2)
            else:
                self.str1 = self.str1 + '1'
                lcd.setText(self.str1)
        def func_button2(self):
            if self.flag == '1':
                self.str2 = self.str2 + '2'
                lcd.setText(self.str2)
            else:
                self.str1 = self.str1 + '2'
                lcd.setText(self.str1)
        def func_button3(self):
            if self.flag == '1':
                self.str2 = self.str2 + '3'
                lcd.setText(self.str2)
            else:
                self.str1 = self.str1 + '3'
                lcd.setText(self.str1)
        def func_button0(self):
            if self.flag == '1':
                self.str2 = self.str2 + '0'
                lcd.setText(self.str2)
            else:
                self.str1 = self.str1 + '0'
                lcd.setText(self.str1)
        #运算符处理函数
        def func_buttonAdd(self):
            lcd.setText(self.str2)
            self.flag = '1'
            self.calFlag = '1'
        def func_buttonDec(self):
            lcd.setText(self.str2)
            self.flag = '1'
            self.calFlag = '2'
        def func_buttonMul(self):
            lcd.setText(self.str2)
            self.flag = '1'
            self.calFlag = '3'
        def func_buttonChu(self):
            lcd.setText(self.str2)
            self.flag = '1'
            self.calFlag = '4'
        def func_buttonEqual(self):
            #字符串先转换为数字,计算结果后再转换为字符串
            if self.calFlag == '1':
                num = str(int(self.str1) + int(self.str2))
            elif self.calFlag == '2':
                num = str(int(self.str1) - int(self.str2))
            elif self.calFlag == '3':
                num = str(int(self.str1) * int(self.str2))
            elif self.calFlag == '4':
                 num = str(int(self.str1) / int(self.str2))
            else:
                self.calFlag = '0'
            lcd.setText(num)
        def func_buttonClear(self):
            self.str1 = ''
            self.str2 = ''
            lcd.setText('')
            self.flag = '0'
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        myapp = UI_form()
        myapp.show()
        sys.exit(app.exec_())
    
    计算器
    计算器
  • 相关阅读:
    卡特兰数
    hdu 1023 Train Problem II
    hdu 1022 Train Problem
    hdu 1021 Fibonacci Again 找规律
    java大数模板
    gcd
    object dection资源
    Rich feature hierarchies for accurate object detection and semantic segmentation(RCNN)
    softmax sigmoid
    凸优化
  • 原文地址:https://www.cnblogs.com/hellangels333/p/8251020.html
Copyright © 2020-2023  润新知