iT邦幫忙

0

[Day 5] PyQt5 從零學習筆記

  • 分享至 

  • xImage
  •  

目標

  1. 實現計算機的功能

上次做完應該長這樣:
calculate.py
那我們來開始一一實現他們的功能~

一、press(處理全部數字及算術邏輯,例如:將5*3-2顯示在計算機上)

    def press(self, pressed):
        if self.showLabel.text() == "0":
            self.showLabel.setText("")    
        self.showLabel.setText(f'{self.showLabel.text()}{pressed}')

二、AC(退回鍵)

    def back(self):
        screen = self.showLabel.text()
        screen = screen[:-1]              # 去掉最最一個
        self.showLabel.setText(screen)    # 顯示到螢幕

三、+/-(將最近的數字,正負顛倒)

    def op(self):
        screen = self.showLabel.text()
        if not screen:
            return

        # 找最後一個運算子
        last_op_pos = -1
        for i in range(len(screen)-1, -1, -1):
            if screen[i] in '+-*/':
                last_op_pos = i
                break

        # 拆分成前綴與當前數字
        before = screen[:last_op_pos+1]
        number = screen[last_op_pos+1:]

        # 如果是以單一負號開頭,去掉;否則加上單一負號
        if number.startswith('-') and not number.startswith('--'):
            number = number[1:]
        else:
            number = '-' + number.lstrip('-')  # 移除多餘負號再補一個

        self.showLabel.setText(before + number)

四、=(算出結果)

    def equal(self):
        screen = self.showLabel.text()
        try:
            ans = eval(screen)                # python eval(),非常強大會直接幫你計算結果
            self.showLabel.setText(str(ans))
        except:
            self.showLabel.setText("錯誤發生")

五、.(小數點的情況)

 def dot(self):
        screen = self.showLabel.text()
        # 從右邊開始找到最近的運算子
        operators = ['+', '-', '*', '/', '=', '%']
        last_operator_pos = -1
        for op in operators:
            pos = screen.rfind(op)
            if pos > last_operator_pos:
                last_operator_pos = pos
        # 取出目前這個數字(例如3+4.5 => 4.5)
        current_number = screen[last_operator_pos + 1:]
        if "." not in current_number:
            self.showLabel.setText(f'{screen}.')

六、計算機圖片的按鈕請自行發揮

成果影片:https://youtu.be/gRWmAvSWb6s?si=gyOetcmkrgpV1jx9

下次要來做新的作品,計算機的成果蠻有成就感的哈哈,已經開始期待還能做出什麼了,那我們下次見~


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言