QT python--pyqt5

第一篇

1、《快速掌握PyQt5》第一章 PyQt5的起点

import sys
from PyQt5.QtWidgets import QApplication, QLabel

if __name__ == '__main__':
    app = QApplication(sys.argv)
    label = QLabel('<font color="red">Hello</font> <h1>World</h1>')
    # label.setText('<font color="red">Hello</font> <h1>World</h1>')
    label.show()
    sys.exit(app.exec_())
# -*- encoding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QLabel


if __name__ == '__main__':
    app = QApplication(sys.argv)
    label = QLabel('<font color="red">Hello</font> <h1>World</h1>')
    # label.setText('<font color="red">Hello</font> <h1>World</h1>')
    label.show()
    sys.exit(app.exec_())
label

2、《快速掌握PyQt5》第二章 信号与槽——裁判鸣枪与选手开跑

# -*- encoding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton


class Demo(QWidget):                                            # 1
    def __init__(self):
        super(Demo, self).__init__()
        self.button = QPushButton('Start', self)                # 2
        self.button.clicked.connect(self.change_text)           # 3

    def change_text(self):
        print('change text')
        self.button.setText('Stop')                             # 4
        self.button.clicked.disconnect(self.change_text)        # 5


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()                                               # 6
    demo.show()                                                 # 7
    sys.exit(app.exec_())

#3. 连接信号与槽函数。self.button就是一个控件,clicked(按钮被点击)是该控件的一个信号,connect()即连接,self.change_text即下方定义的函数(我们称之为槽函数)。所以通用的公式可以是:widget.signal.connect(slot); 

3、《快速掌握PyQt5》第三章 布局管理

 表单布局可以将控件以两列的形式进行排布,左列控件为文本标签,右列为输入型的控件,如QLineEdit。

QGridLayout的addWidget()方法遵循如下语法形式:

addWidget(widget, row, column, rowSpan, columnSpan)

widget就是要添加的控件;row为第几行,0代表第一行;column为第几列,0代表第一列;rowSpan表示要让这个控件去占用几行(默认一行);columnSpan表示要让这个控件去占用几列(默认一列)。

4、《快速掌握PyQt5》第四章 QMessageBox消息框

消息框的种类有:information 信息框;question 问答框; warning 警告框; critical 错误框; about 关于框

QMessageBox.information(QWidget, 'Title', 'Content', buttons)

 5、《快速掌握PyQt5》第五章 完善登录框小程序

在槽函数中,用exec_方法来执行注册界面。为什么要使用exec_而不是show()?

若使用exec_()的话,那么显示出来的注册界面就是模态的,意思就是当前只能对该注册界面进行操作,只有关闭了该界面才能对其他界面进行操作;若使用show()的话,那注册界面就是非模态的,则在显示了注册界面后,还能同时对登录界面进行操作(QDialog有exec_()方法,而QWidget没有)。

QDialog有exec_()方法,而QWidget没有;

setPlaceholderText()方法用于在输入框显示浅灰色的提示文本;

可以用setEchoMode(QLineEdit.Password)将普通输入框中的文字变成原点。

# -*- encoding: utf-8 -*-
import sys
from time import sleep

from PyQt5.QtWidgets import QApplication, QWidget, QDialog, QLabel, QLineEdit, QPushButton, \
    QGridLayout, QVBoxLayout, QHBoxLayout, QMessageBox

USER_PWD = {
    'wang': 'password'
}

class Demo(QWidget):
    def __init__(self):
        super(Demo, self).__init__()
        self.resize(300, 100)

        self.user_label = QLabel('Username:',self)
        self.pwd_label = QLabel('Password:', self)
        self.user_line = QLineEdit(self)
        self.pwd_line = QLineEdit(self)
        self.login_button = QPushButton('Log in', self)
        self.signin_button = QPushButton('Sign in', self)

        self.grid_layout = QGridLayout()
        self.h_layout = QHBoxLayout()
        self.v_layout = QVBoxLayout()

        self.signin_page = SigninPage()

        self.pushbutton_init()
        self.lineedit_init()
        self.layout_init()

    def layout_init(self):
        self.grid_layout.addWidget(self.user_label, 0, 0, 1, 1)
        self.grid_layout.addWidget(self.user_line, 0, 1, 1, 1)
        self.grid_layout.addWidget(self.pwd_label, 1, 0, 1, 1)
        self.grid_layout.addWidget(self.pwd_line, 1,1, 1, 1)
        self.h_layout.addWidget(self.login_button)
        self.h_layout.addWidget(self.signin_button)
        self.v_layout.addLayout(self.grid_layout)
        self.v_layout.addLayout(self.h_layout)

        self.setLayout(self.v_layout)

    def lineedit_init(self):
        self.user_line.setPlaceholderText('Please enter your username')
        self.pwd_line.setPlaceholderText('Please enter your password')
        self.pwd_line.setEchoMode(QLineEdit.Password)

        self.user_line.textChanged.connect(self.check_input_func)
        self.pwd_line.textChanged.connect(self.check_input_func)

    def check_input_func(self):
        if self.user_line.text() and self.pwd_line.text():
            self.login_button.setEnabled(True)
        else:
            self.login_button.setEnabled(False)

    def pushbutton_init(self):
        self.login_button.setEnabled(False)
        self.login_button.clicked.connect(self.check_login_func)
        self.signin_button.clicked.connect(self.show_signin_page_func)

    def check_login_func(self):
        if USER_PWD.get(self.user_line.text()) == self.pwd_line.text():
            QMessageBox.information(self, 'Information', 'Log in Successfully!')
        else:
            QMessageBox.critical(self, 'Wrong', 'Wrong Username or Password')

        self.user_line.clear()
        self.pwd_line.clear()

    def show_signin_page_func(self):
        self.signin_page.exec_()

class SigninPage(QDialog):
    def __init__(self):
        super(SigninPage, self).__init__()
        self.signin_user_label = QLabel('Username:', self)
        self.signin_pwd_label = QLabel('Password:', self)
        self.signin_pwd2_label = QLabel('Password:', self)
        self.signin_user_line = QLineEdit(self)
        self.signin_pwd_line = QLineEdit(self)
        self.signin_pwd2_line = QLineEdit(self)
        self.signin_button = QPushButton('Sign in', self)

        self.user_h_layout = QHBoxLayout()
        self.pwd_h_layout = QHBoxLayout()
        self.pwd2_h_layout = QHBoxLayout()
        self.all_v_layout = QVBoxLayout()

        self.lineedit_init()
        self.pushbutton_init()
        self.layout_init()

    def layout_init(self):
        self.user_h_layout.addWidget(self.signin_user_label)
        self.user_h_layout.addWidget(self.signin_user_line)
        self.pwd_h_layout.addWidget(self.signin_pwd_label)
        self.pwd_h_layout.addWidget(self.signin_pwd_line)
        self.pwd2_h_layout.addWidget(self.signin_pwd2_label)
        self.pwd2_h_layout.addWidget(self.signin_pwd2_line)

        self.all_v_layout.addLayout(self.user_h_layout)
        self.all_v_layout.addLayout(self.pwd_h_layout)
        self.all_v_layout.addLayout(self.pwd2_h_layout)
        self.all_v_layout.addWidget(self.signin_button)

        self.setLayout(self.all_v_layout)

    def lineedit_init(self):
        self.signin_pwd_line.setEchoMode(QLineEdit.Password)
        self.signin_pwd2_line.setEchoMode(QLineEdit.Password)

        self.signin_user_line.textChanged.connect(self.check_input_func)
        self.signin_pwd_line.textChanged.connect(self.check_input_func)
        self.signin_pwd2_line.textChanged.connect(self.check_input_func)

    def check_input_func(self):
        if self.signin_user_line.text() and self.signin_pwd_line.text() and self.signin_pwd2_line.text():
            self.signin_button.setEnabled(True)
        else:
            self.signin_button.setEnabled(False)

    def pushbutton_init(self):
        self.signin_button.setEnabled(False)
        self.signin_button.clicked.connect(self.check_signin_func)

    def check_signin_func(self):
        if self.signin_pwd_line.text() != self.signin_pwd2_line.text():
            QMessageBox.critical(self, 'Wrong', 'Two passwords are not same')
        elif self.signin_user_line.text() not in USER_PWD:
            USER_PWD[self.signin_user_line.text()] = self.signin_pwd_line.text()
            QMessageBox.information(self, 'Information', 'Register Successfully')
            self.close()
        else:
            QMessageBox.critical(self, 'Wrong', 'This Username has been registered!')

        self.signin_user_line.clear()
        self.signin_pwd_line.clear()
        self.signin_pwd2_line.clear()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())
login_signin

6、《快速掌握PyQt5》第六章 文本编辑框QTextEdit和文本浏览框QTextBrowser

7、《快速掌握PyQt5》第七章 各种按钮介绍

若要连接带有参数的自定义槽函数,可以通过lambda表达式来完成。​

self.checkbox2.stateChanged.connect(lambda: self.on_state_change_func(self.checkbox2))

8、《快速掌握PyQt5》第八章 下拉选择框QCombox和数字调节框QSpinBox

QFontComboBox=是从QComboBox继承并专门用来给用户选择字体的控件。 

数字调节框介绍了QSpinBox和QDoubleSpinBox,前者调节整型数字,后者调节浮点型数字。

9、《快速掌握PyQt5》第九章 滑动条QSlider和表盘QDial

 Qt.QHorizontal和Qt.Vertical分别用来实现水平的滑动条和垂直的滑动条。

10、《快速掌握PyQt5》第十章 定时器QTimer和进度条QProgressBar

11、《快速掌握PyQt5》第十一章 液晶数字显示屏QLCDNumber

12、《快速掌握PyQt5》第十二章 与日期时间相关的控件

QCalendarWidget为日历控件,用户可以设置日期范围,可以设置日历初始化时显示的日期(如果没有设置的话,默认为当天日期);

QDateTimeEdit是QDateEdit和QTimeEdit的父类,看名字就知道QDateTimeEdit可以编辑日期和时间,QDateEdit只能编辑日期(年月日),而QTimeEdit只能编辑时间(时分秒)。

第二篇

pip install pyqt5-tools

pyqt5包提供assistant、designer等工具,需要安装。

13、《快速掌握PyQt5》第十三章 学会使用文档——Qt Assistant

安装后,位于qt5_applications\Qt\bin。

Qt为我们提供了一个非常方便的文档查询助手——QtAssistant

PyQt5官网的线上文档已经无法使用,可直接到Qt官网查阅文档:Qt文档地址

14、《快速掌握PyQt5》第十四章 快速制作界面——Qt Designer

安装后,位于venv\Lib\site-packages\qt5_applications\Qt\bin。

 制作界面的方式一共有两种:代码和QtDesigner,后者让我们在界面制作上变得更加快速更加有效率。

QtDesigner可以快速帮助开发人员设计界面,提高开发效率。设计ui时需要使用designer.exe打开UI文件设计。

用pyuic5命令可以将ui文件转换为py文件:pyuic5 -o destination.py original.ui

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from edit import Ui_Form

class Demo(QWidget, Ui_Form):
    def __init__(self):
        super(Demo, self).__init__()
        self.setupUi(self)
        self.text_edit.textChanged.connect(self.show_text_func)

    def show_text_func(self):
        self.text_browser.setText(self.text_edit.toPlainText())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

第三篇

25、《快速掌握PyQt5》第二十五章 Pyinstaller打包

 

参考:

1、PyQT5 快速掌握PyQt5 - 知乎

posted @ 2016-12-20 22:53  yuxi_o  阅读(19120)  评论(0编辑  收藏  举报