PyQt實戰之計算器的實現

一.啓動並進入eric主界面,如下圖:
鼠標右鍵,”打開方式”選擇“pthon.exe”
這裏寫圖片描述

二.eric的主界面如下圖所示:
選擇“Project”–>”New”,設置如下圖所示
這裏寫圖片描述
點擊“OK“,可以看到在source這一欄有個init.py這個文件,如下圖所示
這裏寫圖片描述
我們雙擊查看這個文件,發現這個init.py是個空文件,裏面什麼內容都沒有。事實上這個init.py的作用只是讓整個工程成爲Python的一個包而已

三.選擇”Form”選項卡
這裏寫圖片描述
在空白處,鼠標右鍵選擇”New Form“,彈出來一個框,如下圖:
這裏寫圖片描述
點擊下拉列表後,
這裏寫圖片描述
”隨便“給這個新建的form取個名字,就可以在form選項卡下看到這個新建
的form了,如下圖所示:
這裏寫圖片描述
同時QT設計師也會自動打開,供你編輯這個.ui文件,然後拖動按鈕,最終的效果圖如下圖所示:
這裏寫圖片描述
保存全部“之後回到eric,右鍵點擊calc1.ui,選擇compile form
回到source選項卡,發現多了一個文件
這裏寫圖片描述
這個文件就是剛纔calc1.ui編譯生成的文件,我們雙擊這個Ui_cal1.py可以看到它的內容,然後按F2運行,也可以直接進到Ui_cal1.py所在的目錄,用python.exe運行,這兩種方法都可以。運行效果如下:
這裏寫圖片描述
注意:這個編譯生成的Ui_cal1.py我們是不能修改的,因爲他是編譯自動生成的代碼,即使你修改了到下次編譯後你所做的修改也會全部丟失。實際上官方也不建議我們修改這個文件,在這個.py文件中,我們可以看到這樣一句話:這裏寫圖片描述
,翻譯成中文就是”所有的修改都會被丟失“(請允許我賣弄一下自己的英文^_^)。

四.添加自定義代碼
既然在那個文件中我們不能添加代碼,那我應該在哪裏添加自己的代碼呢?
我們還是回到Form選項卡,右鍵點擊calc1.ui(請原諒我無法截圖),選擇”Generate Dialog Code”,這個時候會彈出這樣一個框,如圖
這裏寫圖片描述
我們單擊New,設置好類名、文件名和路徑後,點擊OK即可,如下圖
這裏寫圖片描述
我們分別給每一個按鈕添加slot(不明白slot的話建議先去學一下QT哦^_^),如下圖所示:
這裏寫圖片描述,添加好後,點擊OK即可。
在回到這個source選項卡,我們就可以看到又多了一個py文件,如下圖所示:
這裏寫圖片描述
我們可以在這個文件中添加代碼了,並且在這個文件中可以看到剛纔我們添加的slot了。
這裏寫圖片描述
計算器的代碼很簡單,這裏直接上代碼咯。

# -*- coding: utf-8 -*-

"""
Module implementing Calc.
"""
import sys
from PyQt4 import QtGui, QtCore
from PyQt4.QtGui import QWidget
from PyQt4.QtCore import pyqtSignature

from Ui_Calc import Ui_Form

class Calc(QWidget, Ui_Form):
    """
    Class documentation goes here.
    """
    num = 0
    num2 = 0
    add = False
    sub = False
    mul = False
    div = False

    def __init__(self, parent = None):
        """
        Constructor
        """
        QWidget.__init__(self, parent)
        self.setupUi(self)

    @pyqtSignature("")
    def on_button1_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        if self.add == False and self.sub == False and self.mul == False and self.div == False:
            self.num = self.num*10 + 1
            self.resultLabel.setText(str(self.num))
        else:
            self.num2 = self.num2*10 + 1
            self.resultLabel.setText(str(self.num2))

    @pyqtSignature("")
    def on_button2_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        if self.add == False and self.sub == False and self.mul == False and self.div == False:
            self.num = self.num*10 + 2
            self.resultLabel.setText(str(self.num))
        else:
            self.num2 = self.num2*10 + 2
            self.resultLabel.setText(str(self.num2))

    @pyqtSignature("")
    def on_button0_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        if self.add == False and self.sub == False and self.mul == False and self.div == False:
            self.num = self.num*10 + 0
            self.resultLabel.setText(str(self.num))
        else:
            self.num2 = self.num2*10 + 0
            self.resultLabel.setText(str(self.num2))

    @pyqtSignature("")
    def on_button3_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        if self.add == False and self.sub == False and self.mul == False and self.div == False:
            self.num = self.num*10 + 3
            self.resultLabel.setText(str(self.num))
        else:
            self.num2 = self.num2*10 + 3
            self.resultLabel.setText(str(self.num2))

    @pyqtSignature("")
    def on_button4_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        if self.add == False and self.sub == False and self.mul == False and self.div == False:
            self.num = self.num*10 + 4
            self.resultLabel.setText(str(self.num))
        else:
            self.num2 = self.num2*10 + 4
            self.resultLabel.setText(str(self.num2))

    @pyqtSignature("")
    def on_button5_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        if self.add == False and self.sub == False and self.mul == False and self.div == False:
            self.num = self.num*10 + 5
            self.resultLabel.setText(str(self.num))
        else:
            self.num2 = self.num2*10 + 5
            self.resultLabel.setText(str(self.num2))

    @pyqtSignature("")
    def on_button6_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        if self.add == False and self.sub == False and self.mul == False and self.div == False:
            self.num = self.num*10 + 6
            self.resultLabel.setText(str(self.num))
        else:
            self.num2 = self.num2*10 + 6
            self.resultLabel.setText(str(self.num2))

    @pyqtSignature("")
    def on_button7_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        if self.add == False and self.sub == False and self.mul == False and self.div == False:
            self.num = self.num*10 + 7
            self.resultLabel.setText(str(self.num))
        else:
            self.num2 = self.num2*10 + 7
            self.resultLabel.setText(str(self.num2))

    @pyqtSignature("")
    def on_button8_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        if self.add == False and self.sub == False and self.mul == False and self.div == False:
            self.num = self.num*10 + 8
            self.resultLabel.setText(str(self.num))
        else:
            self.num2 = self.num2*10 + 8
            self.resultLabel.setText(str(self.num2))

    @pyqtSignature("")
    def on_button9_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        if self.add == False and self.sub == False and self.mul == False and self.div == False:
            self.num = self.num*10 + 9
            self.resultLabel.setText(str(self.num))
        else:
            self.num2 = self.num2*10 + 9
            self.resultLabel.setText(str(self.num2))

    @pyqtSignature("")
    def on_addBtn_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        self.add = True
        self.sub = False
        self.mul = False
        self.div = False
        self.resultLabel.setText("+")

    @pyqtSignature("")
    def on_subBtn_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        self.add = False
        self.sub = True
        self.mul = False
        self.div = False
        self.resultLabel.setText("-")

    @pyqtSignature("")
    def on_mulBtn_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        self.add = False
        self.sub = False
        self.mul = True
        self.div = False
        self.resultLabel.setText("X")

    @pyqtSignature("")
    def on_divBtn_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        self.add = False
        self.sub = False
        self.mul = False
        self.div = True
        self.resultLabel.setText("/")

    @pyqtSignature("")
    def on_equBtn_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        if self.add == True:
            self.resultLabel.setText(str(self.num+self.num2))
        elif self.sub == True:
            self.resultLabel.setText(str(self.num-self.num2))
        elif self.mul == True:
            self.resultLabel.setText(str(self.num*self.num2))
        elif self.div == True:
            if self.num2 == 0:
                self.resultLabel.setText(u"除數不能爲0")
            else:
                self.resultLabel.setText(str(self.num/self.num2))

    @pyqtSignature("")
    def on_clnBtn_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet

        #raise NotImplementedError
        self.add = False
        self.sub = False
        self.mul = False
        self.div = False
        self.num = 0
        self.num2 = 0
        self.resultLabel.setText("")


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    calc = Calc()
    calc.show()
    sys.exit(app.exec_())

保存後,按F2就可以運行咯,雖然這個計算器功能不多,但還是給大家看一下效果吧。
這裏寫圖片描述
額,該死的靜態圖片。

視頻教程見:http://www.duobei.com/course/6238671512

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章