博客 / 詳情

返回

pyqt圖形化顯示—2.信號與槽

信號:

event事件的工作方法是不斷掃描是否發生事件然後做出相應,這種方式固然簡單易懂,但如果我同一時間需要多項交互,那就不是能處理的了

所以pyside6採用信號(signal),可以以解為一件事情發生會發出一個信號呼叫對應的處理器(slot)響應

基礎控件的信號:

按鍵:

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        btn = QPushButton('按鈕名稱', self) 

        btn.clicked.connect(self.btn_click)  # 按鍵點擊時觸發事件

    def btn_click(self):
        print('按鈕被點擊了')
btn.clicked.connect()   # 變量名稱.信號名稱.connect(對應的事件函數)

輸入框:

獲得輸入的內容

account = self.lineEdit.text()

變量名 = self.對應輸入框的objectName.text()

對應輸入框的objectName可以在Qt Designer中找到

應用小項目:簡易計算器

首先在Qt Designer繪製一個簡易的計算器頁面,保存ui文件

image

 轉化為py文件,靜態導入,多繼承打開

image

 賦予按鍵數值和符號

    def com(self):
        self.pushButton_0.clicked.connect(lambda : self.add('0'))
        self.pushButton_1.clicked.connect(lambda : self.add('1'))
        self.pushButton_2.clicked.connect(lambda : self.add('2'))
        self.pushButton_3.clicked.connect(lambda : self.add('3'))
        self.pushButton_4.clicked.connect(lambda : self.add('4'))
        self.pushButton_5.clicked.connect(lambda : self.add('5'))
        self.pushButton_6.clicked.connect(lambda : self.add('6'))
        self.pushButton_7.clicked.connect(lambda : self.add('7'))
        self.pushButton_8.clicked.connect(lambda : self.add('8'))
        self.pushButton_9.clicked.connect(lambda : self.add('9'))
        self.pushButton_jia.clicked.connect(lambda : self.add('+'))
        self.pushButton_jian.clicked.connect(lambda : self.add('-'))
        self.pushButton_cheng.clicked.connect(lambda : self.add('*'))
        self.pushButton_chu.clicked.connect(lambda : self.add('/'))
        self.pushButton_dian.clicked.connect(lambda : self.add('.'))
        
        self.pushButton_C.clicked.connect(lambda : self.clear())
        self.pushButton_CE.clicked.connect(lambda : self.clearall())
        self.pushButton_ent.clicked.connect(lambda : self.jisuan())

添加  add函數

定義一個add函數,將參數num轉換為字符串後拼接到self.result後面,更新在輸出框內的顯示
    def add(self, num):
        self.result += str(num)
        self.lineEdit.setText(self.result)

清除 clear函數

刪除self.result最後一個字符,實現回退功能,記得更新顯示

    def clear(self):
        self.result = self.result[:-1]
        self.lineEdit.setText(self.result)

全部刪除 clearall函數

直接將self.result置為空,記得更新顯示

    def clearall(self):
        self.result = ''
        self.lineEdit.setText(self.result)

計算 jisuan函數

使用eval函數計算表達式結果,由於存在回退功能,所以計算時不能更新self.result內容,所以直接更新顯示就可以,添加error防止出現錯誤,提高魯棒性

    def jisuan(self):
        try:
            self.lineEdit.setText(str(eval(self.result)))
        except:
            self.lineEdit.setText('error')

就醬,一個簡易(劃掉)簡陋計算器就完成啦

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.