From ce5d9029f68a55c047720df12ff2dca205532303 Mon Sep 17 00:00:00 2001 From: M11212051 Date: Sun, 5 May 2024 22:29:17 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E5=82=B3=E6=AA=94=E6=A1=88=E5=88=B0?= =?UTF-8?q?=E3=80=8Cpyqt5/CODE/=E5=85=83=E4=BB=B6=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=AF=84=E4=BE=8B=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyqt5/CODE/元件使用範例/qt04_lineEdit01.py | 46 +++++++++++++ pyqt5/CODE/元件使用範例/qt04_lineEdit02.py | 58 ++++++++++++++++ pyqt5/CODE/元件使用範例/qt04_lineEdit03.py | 44 ++++++++++++ pyqt5/CODE/元件使用範例/qt04_lineEdit04.py | 54 +++++++++++++++ pyqt5/CODE/元件使用範例/qt04_painter.py | 80 ++++++++++++++++++++++ 5 files changed, 282 insertions(+) create mode 100644 pyqt5/CODE/元件使用範例/qt04_lineEdit01.py create mode 100644 pyqt5/CODE/元件使用範例/qt04_lineEdit02.py create mode 100644 pyqt5/CODE/元件使用範例/qt04_lineEdit03.py create mode 100644 pyqt5/CODE/元件使用範例/qt04_lineEdit04.py create mode 100644 pyqt5/CODE/元件使用範例/qt04_painter.py diff --git a/pyqt5/CODE/元件使用範例/qt04_lineEdit01.py b/pyqt5/CODE/元件使用範例/qt04_lineEdit01.py new file mode 100644 index 0000000..8bc8843 --- /dev/null +++ b/pyqt5/CODE/元件使用範例/qt04_lineEdit01.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- + +''' + 【簡介】 + PyQt5中 QLineEdit.EchoMode效果範例 + +''' + +from PyQt5.QtWidgets import QApplication, QLineEdit , QWidget , QFormLayout +import sys + +class lineEditDemo(QWidget): + def __init__(self, parent=None): + super(lineEditDemo, self).__init__(parent) + self.setWindowTitle("QLineEdit範例") + + flo = QFormLayout() + pNormalLineEdit = QLineEdit( ) + pNoEchoLineEdit = QLineEdit() + pPasswordLineEdit = QLineEdit( ) + pPasswordEchoOnEditLineEdit = QLineEdit( ) + + flo.addRow("Normal", pNormalLineEdit) + flo.addRow("NoEcho", pNoEchoLineEdit) + flo.addRow("Password", pPasswordLineEdit) + flo.addRow("PasswordEchoOnEdit", pPasswordEchoOnEditLineEdit) + + pNormalLineEdit.setPlaceholderText("Normal") + pNoEchoLineEdit.setPlaceholderText("NoEcho") + pPasswordLineEdit.setPlaceholderText("Password") + pPasswordEchoOnEditLineEdit.setPlaceholderText("PasswordEchoOnEdit") + + # 設定顯示效果 + pNormalLineEdit.setEchoMode(QLineEdit.Normal) + pNoEchoLineEdit.setEchoMode(QLineEdit.NoEcho) + pPasswordLineEdit.setEchoMode(QLineEdit.Password) + pPasswordEchoOnEditLineEdit.setEchoMode(QLineEdit.PasswordEchoOnEdit) + + self.setLayout(flo) + + +if __name__ == "__main__": + app = QApplication(sys.argv) + win = lineEditDemo() + win.show() + sys.exit(app.exec_()) diff --git a/pyqt5/CODE/元件使用範例/qt04_lineEdit02.py b/pyqt5/CODE/元件使用範例/qt04_lineEdit02.py new file mode 100644 index 0000000..f339821 --- /dev/null +++ b/pyqt5/CODE/元件使用範例/qt04_lineEdit02.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- + +''' + 【簡介】 + PyQt5中 QLineEdit的驗證器範例 + +''' + +from PyQt5.QtWidgets import QApplication, QLineEdit , QWidget , QFormLayout +from PyQt5.QtGui import QIntValidator ,QDoubleValidator , QRegExpValidator +from PyQt5.QtCore import QRegExp +import sys + +class lineEditDemo(QWidget): + def __init__(self, parent=None): + super(lineEditDemo, self).__init__(parent) + self.setWindowTitle("QLineEdit範例") + + flo = QFormLayout() + pIntLineEdit = QLineEdit( ) + pDoubleLineEdit = QLineEdit() + pValidatorLineEdit = QLineEdit( ) + + flo.addRow("整數", pIntLineEdit) + flo.addRow("浮點數", pDoubleLineEdit) + flo.addRow("字母和數字", pValidatorLineEdit) + + pIntLineEdit.setPlaceholderText("整數"); + pDoubleLineEdit.setPlaceholderText("浮點數"); + pValidatorLineEdit.setPlaceholderText("字母和數字"); + + # 整數,範圍:[1, 99] + pIntValidator = QIntValidator(self) + pIntValidator.setRange(1, 99) + + # 浮點數,範圍:[-360, 360],精度:小數點後兩位 + pDoubleValidator = QDoubleValidator(self) + pDoubleValidator.setRange(-360, 360) + pDoubleValidator.setNotation(QDoubleValidator.StandardNotation) + pDoubleValidator.setDecimals(2) + + # 字母和數字 + reg = QRegExp("[a-zA-Z0-9]+$") + pValidator = QRegExpValidator(self) + pValidator.setRegExp(reg) + + # 設定驗證器 + pIntLineEdit.setValidator(pIntValidator) + pDoubleLineEdit.setValidator(pDoubleValidator) + pValidatorLineEdit.setValidator(pValidator) + + self.setLayout(flo) + +if __name__ == "__main__": + app = QApplication(sys.argv) + win = lineEditDemo() + win.show() + sys.exit(app.exec_()) diff --git a/pyqt5/CODE/元件使用範例/qt04_lineEdit03.py b/pyqt5/CODE/元件使用範例/qt04_lineEdit03.py new file mode 100644 index 0000000..5721bd0 --- /dev/null +++ b/pyqt5/CODE/元件使用範例/qt04_lineEdit03.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- + +''' + 【簡介】 + PyQt5中 QLineEdit的輸入遮罩範例 + +''' + +from PyQt5.QtWidgets import QApplication, QLineEdit , QWidget , QFormLayout +import sys + +class lineEditDemo(QWidget): + def __init__(self, parent=None): + super(lineEditDemo, self).__init__(parent) + self.setWindowTitle("QLineEdit的輸入遮罩範例") + + flo = QFormLayout() + pIPLineEdit = QLineEdit() + pMACLineEdit = QLineEdit() + pDateLineEdit = QLineEdit() + pLicenseLineEdit = QLineEdit() + + pIPLineEdit.setInputMask("000.000.000.000;_") + pMACLineEdit.setInputMask("HH:HH:HH:HH:HH:HH;_") + pDateLineEdit.setInputMask("0000-00-00") + pLicenseLineEdit.setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#") + + flo.addRow("數字遮罩", pIPLineEdit) + flo.addRow("Mac遮罩", pMACLineEdit) + flo.addRow("日期遮罩", pDateLineEdit) + flo.addRow("許可證遮罩", pLicenseLineEdit) + + #pIPLineEdit.setPlaceholderText("111") + #pMACLineEdit.setPlaceholderText("222") + #pLicenseLineEdit.setPlaceholderText("333") + #pLicenseLineEdit.setPlaceholderText("444") + + self.setLayout(flo) + +if __name__ == "__main__": + app = QApplication(sys.argv) + win = lineEditDemo() + win.show() + sys.exit(app.exec_()) diff --git a/pyqt5/CODE/元件使用範例/qt04_lineEdit04.py b/pyqt5/CODE/元件使用範例/qt04_lineEdit04.py new file mode 100644 index 0000000..ebfaa45 --- /dev/null +++ b/pyqt5/CODE/元件使用範例/qt04_lineEdit04.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- + +''' + 【簡介】 + PyQt5中 QLineEdit範例 + +''' + +from PyQt5.QtWidgets import QApplication, QLineEdit , QWidget , QFormLayout +from PyQt5.QtGui import QIntValidator , QDoubleValidator , QFont +from PyQt5.QtCore import Qt +import sys + +class lineEditDemo(QWidget): + def __init__(self, parent=None): + super(lineEditDemo, self).__init__(parent) + e1 = QLineEdit() + e1.setValidator( QIntValidator() ) + e1.setMaxLength(4) + e1.setAlignment( Qt.AlignRight ) + e1.setFont( QFont("Arial",20)) + e2 = QLineEdit() + e2.setValidator( QDoubleValidator(0.99,99.99,2)) + flo = QFormLayout() + flo.addRow("integer validator", e1) + flo.addRow("Double validator",e2) + e3 = QLineEdit() + e3.setInputMask('+99_9999_999999') + flo.addRow("Input Mask",e3) + e4 = QLineEdit() + e4.textChanged.connect( self.textchanged ) + flo.addRow("Text changed",e4) + e5 = QLineEdit() + e5.setEchoMode( QLineEdit.Password ) + flo.addRow("Password",e5) + e6 = QLineEdit("Hello PyQt5") + e6.setReadOnly(True) + flo.addRow("Read Only",e6 ) + e5.editingFinished.connect( self.enterPress ) + self.setLayout(flo) + self.setWindowTitle("QLineEdit範例") + + def textchanged(self, text): + print( "輸入的內容為:"+text ) + + def enterPress( self ): + print( "已輸入值" ) + + +if __name__ == "__main__": + app = QApplication(sys.argv) + win = lineEditDemo() + win.show() + sys.exit(app.exec_()) diff --git a/pyqt5/CODE/元件使用範例/qt04_painter.py b/pyqt5/CODE/元件使用範例/qt04_painter.py new file mode 100644 index 0000000..1dcd95d --- /dev/null +++ b/pyqt5/CODE/元件使用範例/qt04_painter.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- + +""" + 【簡介】 + 列印圖片範例 + + +""" +from PyQt5.QtCore import Qt +from PyQt5.QtGui import QImage , QIcon, QPixmap +from PyQt5.QtWidgets import QApplication , QMainWindow, QLabel, QSizePolicy , QAction +from PyQt5.QtPrintSupport import QPrinter, QPrintDialog +import sys + +class MainWindow(QMainWindow): + def __init__(self,parent=None): + super(MainWindow,self).__init__(parent) + self.setWindowTitle(self.tr("列印圖片")) + # 建立一個置放圖形的QLabel物件imageLabel,並將該QLabel物件設定為中心視窗。 + self.imageLabel=QLabel() + self.imageLabel.setSizePolicy(QSizePolicy.Ignored,QSizePolicy.Ignored) + self.setCentralWidget(self.imageLabel) + + self.image=QImage() + + # 建立功能表、工具列等元件 + self.createActions() + self.createMenus() + self.createToolBars() + + # 在imageLabel物件中置放圖形 + if self.image.load("./images/screen.png"): + self.imageLabel.setPixmap(QPixmap.fromImage(self.image)) + self.resize(self.image.width(),self.image.height()) + + def createActions(self): + self.PrintAction=QAction(QIcon("./images/printer.png"),self.tr("列印"),self) + self.PrintAction.setShortcut("Ctrl+P") + self.PrintAction.setStatusTip(self.tr("列印")) + self.PrintAction.triggered.connect(self.slotPrint) + + def createMenus(self): + PrintMenu=self.menuBar().addMenu(self.tr("列印")) + PrintMenu.addAction(self.PrintAction) + + def createToolBars(self): + fileToolBar=self.addToolBar("Print") + fileToolBar.addAction(self.PrintAction) + + def slotPrint(self): + # 新建一個QPrinter物件 + printer=QPrinter() + # 建立一個QPrintDialog物件,參數為QPrinter物件 + printDialog=QPrintDialog(printer,self) + + ''' + 判斷列印對話方塊顯示後是否點擊「列印」鈕,如果是, + 則相關列印屬性可以透過建立QPrintDialog物件時以QPrinter物件取得, + 若點擊「取消」鈕,則不執行後續的列印操作。 + ''' + if printDialog.exec_(): + # 建立一個QPainter物件,並指定繪圖設備為一個QPrinter物件。 + painter=QPainter(printer) + # 取得QPainter物件的視窗矩形 + rect=painter.viewport() + # 取得圖形的大小 + size=self.image.size() + # 依照圖形的比例大小重新設定視窗矩形 + size.scale(rect.size(),Qt.KeepAspectRatio) + painter.setViewport(rect.x(),rect.y(),size.width(),size.height()) + # 設定QPainter視窗大小為圖形的大小 + painter.setWindow(self.image.rect()) + # 列印 + painter.drawImage(0,0,self.image) + +if __name__ == "__main__": + app=QApplication(sys.argv) + main=MainWindow() + main.show() + sys.exit(app.exec_())