- 只是在顯示效果,計算機並不能執行,請自行加在適當的地方。
- 必要的地方,使用「##」做了註解。
- 說明不多,請直接看程式的註解。
每一個視窗左上角都會有一個小圖示。你也可以自己加。
- #加window icon
- import sys #只是為了使用在釋放程式的記憶體
- from PyQt5.QtWidgets import QApplication #qt的應用程式
- from PyQt5.QtWidgets import QLabel #qt的Label
- from PyQt5.QtWidgets import QWidget #qt的部件,就是我們要的視窗
- ##目錄中要有icon.png
- from PyQt5 import QtGui ##為了加一個window icon
- app = QApplication(sys.argv) #建立主程式的實體 app ,參數是一個list,如果不需要sys.argv,可以改成[]
- #以下一一建立程式中的顯示部件
- window = QWidget() #建立視窗實體
- window.setWindowTitle('第一個視窗程式') #視窗的抬頭
- window.setGeometry(200, 200, 280, 80) #視窗的位置和大小(x,y,長,寬)
- #window.move(60, 15) #重新將視窗移到電腦螢幕的(60,15)位置
- helloMsg = QLabel('<h1>Hello World!</h1>', parent=window) #建立標籤實體
- helloMsg.move(60, 15) #標籤移到視窗中的某位置
- window.setWindowIcon(QtGui.QIcon('icon.png')) ##這行將icon放上去。
- window.show() #將視窗設定為顯示
- sys.exit(app.exec()) #開始執行應用程式,並在結束後,釋放記憶體。如果是python2,要用app.exec_()。
|
- ##改變按鈕換字型和顏色
- import sys
- from PyQt5.QtWidgets import QApplication #qt應用程式
- from PyQt5.QtWidgets import QMainWindow #qt主視窗
- from PyQt5.QtWidgets import QWidget #qt總部件
- from PyQt5 import QtGui #為了加一個window icon,這裡可以省略。
- from PyQt5.QtCore import Qt ##一般性質的設定
- from PyQt5.QtWidgets import QGridLayout #格狀排列
- from PyQt5.QtWidgets import QLineEdit #單行文字
- from PyQt5.QtWidgets import QPushButton #按鈕
- from PyQt5.QtWidgets import QVBoxLayout #垂直排列
- from functools import partial #有關function的工作
- #這是原作者,感謝。
- __version__ = '0.1'
- __author__ = 'Leodanis Pozo Ramos'
- #定義主視窗,繼承自QMainWindow
- class PyCalcUi(QMainWindow):
- #初始化,訂定視窗外觀
- def __init__(self):
- super().__init__()
- self.setWindowTitle('py小計算機')
- self.setFixedSize(235, 235) #固定大小,免得計算機變形。
- self.generalLayout = QVBoxLayout() #整體的部件是垂直排列
- # 建立中央部件
- self._centralWidget = QWidget(self) #先建立總部件實體(self相當於parent=self,top level的物件沒有parent了,所以不能省略。)
- self.setCentralWidget(self._centralWidget) #再設定成中央部件
- self._centralWidget.setLayout(self.generalLayout) #中央部件就設定為整體垂直排列
- self._createDisplay() #計算機顯示數字的部件
- self._createButtons() #計算機顯示按鈕的部件
- #self.setWindowIcon(QtGui.QIcon('icon.png')) #這行將icon放上去。這行可以省略。
-
- #計算機顯示數字的部件
- def _createDisplay(self):
- self.display = QLineEdit() #顯示只要一行
- self.display.setFixedHeight(35) #顯示幕的高度
- self.display.setAlignment(Qt.AlignRight) #靠右顯示
- self.display.setReadOnly(True) #設定唯讀
-
- self.generalLayout.addWidget(self.display) #將以上設定加入整體垂直設定中
-
- def _createButtons(self):
- self.buttons = {}
- buttonsLayout = QGridLayout()
- #在字典中,設定按鈕顯示的數字和在格狀排列中的座標
- buttons = {'7': (0, 0),
- '8': (0, 1),
- '9': (0, 2),
- '/': (0, 3),
- 'C': (0, 4),
- '4': (1, 0),
- '5': (1, 1),
- '6': (1, 2),
- '*': (1, 3),
- '(': (1, 4),
- '1': (2, 0),
- '2': (2, 1),
- '3': (2, 2),
- '-': (2, 3),
- ')': (2, 4),
- '0': (3, 0),
- '00': (3, 1),
- '.': (3, 2),
- '+': (3, 3),
- '=': (3, 4),
- }
- #取出字典中的文字和座標,一一擺進格狀排列中
- for btnText, pos in buttons.items():
- self.buttons[btnText] = QPushButton(btnText) #設定按鈕實體,以及顯示的文字
- ##設定字體
- self.buttons[btnText].setStyleSheet('QPushButton {font: bold;font-size: 30px;}')
-
- ##set button color
- if btnText in ['/','*','-','+','(',')']:
- self.buttons[btnText].setStyleSheet('QPushButton {background-color: #ff8028; color: white;font: bold;font-size: 30px;}')
- elif btnText == '=':
- self.buttons[btnText].setStyleSheet('QPushButton {background-color: #01a2e8; color: white;font: bold;font-size: 30px;}')
- elif btnText == 'C':
- self.buttons[btnText].setStyleSheet('QPushButton {background-color: #ed1d25; color: white;font: bold;font-size: 30px;}')
-
-
- buttonsLayout.addWidget(self.buttons[btnText], pos[0], pos[1]) #擺進格狀排列
-
- self.generalLayout.addLayout(buttonsLayout)#將以上設定加入整體垂直設定中
- def setDisplayText(self, text):
- """Set display's text."""
- self.display.setText(text)
- self.display.setFocus()
- def displayText(self):
- """Get display's text."""
- return self.display.text()
- def clearDisplay(self):
- """Clear the display."""
- self.setDisplayText("")
- # 主程式
- def main():
- pycalc = QApplication(sys.argv) #建立app
- view = PyCalcUi() #建立主視窗實體
-
- view.show()
- sys.exit(pycalc.exec())
- if __name__ == '__main__':
- main()
|
- ##換一下+-÷×符號,看起來比較大方。
- ##小心,這裡只是顯示用,後續要放到計算式裡面的時候,必需轉換回來/*,這樣eval()才能正確計算。
- import sys
- from PyQt5.QtWidgets import QApplication #qt應用程式
- from PyQt5.QtWidgets import QMainWindow #qt主視窗
- from PyQt5.QtWidgets import QWidget #qt總部件
- from PyQt5 import QtGui #為了加一個window icon,這裡可以省略。
- from PyQt5.QtCore import Qt #一般性質的設定
- from PyQt5.QtWidgets import QGridLayout #格狀排列
- from PyQt5.QtWidgets import QLineEdit #單行文字
- from PyQt5.QtWidgets import QPushButton #按鈕
- from PyQt5.QtWidgets import QVBoxLayout #垂直排列
- from functools import partial #有關function的工作
- #這是原作者,感謝。
- __version__ = '0.1'
- __author__ = 'Leodanis Pozo Ramos'
- #定義主視窗,繼承自QMainWindow
- class PyCalcUi(QMainWindow):
- #初始化,訂定視窗外觀
- def __init__(self):
- super().__init__()
- self.setWindowTitle('py小計算機')
- self.setFixedSize(235, 235) #固定大小,免得計算機變形。
- self.generalLayout = QVBoxLayout() #整體的部件是垂直排列
- # 建立中央部件
- self._centralWidget = QWidget(self) #先建立總部件實體(self相當於parent=self,top level的物件沒有parent了,所以不能省略。)
- self.setCentralWidget(self._centralWidget) #再設定成中央部件
- self._centralWidget.setLayout(self.generalLayout) #中央部件就設定為整體垂直排列
- self._createDisplay() #計算機顯示數字的部件
- self._createButtons() #計算機顯示按鈕的部件
- #self.setWindowIcon(QtGui.QIcon('icon.png')) #這行將icon放上去。這行可以省略。
-
- #計算機顯示數字的部件
- def _createDisplay(self):
- self.display = QLineEdit() #顯示只要一行
- self.display.setFixedHeight(35) #顯示幕的高度
- self.display.setAlignment(Qt.AlignRight) #靠右顯示
- self.display.setReadOnly(True) #設定唯讀
-
- self.generalLayout.addWidget(self.display) #將以上設定加入整體垂直設定中
-
- def _createButtons(self):
- self.buttons = {}
- buttonsLayout = QGridLayout()
- #在字典中,設定按鈕顯示的數字和在格狀排列中的座標
- buttons = {'7': (0, 0),
- '8': (0, 1),
- '9': (0, 2),
- '÷': (0, 3), ##÷
- 'C': (0, 4),
- '4': (1, 0),
- '5': (1, 1),
- '6': (1, 2),
- '×': (1, 3), ##×
- '(': (1, 4),
- '1': (2, 0),
- '2': (2, 1),
- '3': (2, 2),
- '-': (2, 3),##-
- ')': (2, 4),
- '0': (3, 0),
- '00': (3, 1),
- '.': (3, 2),
- '+': (3, 3),##+
- '=': (3, 4),
- }
- #取出字典中的文字和座標,一一擺進格狀排列中
- for btnText, pos in buttons.items():
- self.buttons[btnText] = QPushButton(btnText) #設定按鈕實體,以及顯示的文字
- #設定字體
- self.buttons[btnText].setStyleSheet('QPushButton {font: bold;font-size: 30px;}')
-
- #set button color
- if btnText in ['+','-','×','÷','(',')']:##這裡也改變了
- self.buttons[btnText].setStyleSheet('QPushButton {background-color: #ff8028; color: white;font: bold;font-size: 30px;}')
- elif btnText == '=':
- self.buttons[btnText].setStyleSheet('QPushButton {background-color: #01a2e8; color: white;font: bold;font-size: 30px;}')
- elif btnText == 'C':
- self.buttons[btnText].setStyleSheet('QPushButton {background-color: #ed1d25; color: white;font: bold;font-size: 30px;}')
-
-
- buttonsLayout.addWidget(self.buttons[btnText], pos[0], pos[1]) #擺進格狀排列
-
- self.generalLayout.addLayout(buttonsLayout)#將以上設定加入整體垂直設定中
- def setDisplayText(self, text):
- """Set display's text."""
- self.display.setText(text)
- self.display.setFocus()
- def displayText(self):
- """Get display's text."""
- return self.display.text()
- def clearDisplay(self):
- """Clear the display."""
- self.setDisplayText("")
- # 主程式
- def main():
- pycalc = QApplication(sys.argv) #建立app
- view = PyCalcUi() #建立主視窗實體
-
- view.show()
- sys.exit(pycalc.exec())
- if __name__ == '__main__':
- main()
|
p.s.
在def _buildExpression(self, sub_exp): 中,還必須把符號換回英數,才能正確執行。
沒有留言:
張貼留言