一、很程序员,都喜欢开发windows桌面应用系统,基于python3开发,效率高
二、PyQt5开发的桌面应用系统是可以跨平台的,可以在Mac上、Window上、Linux桌面系统上运行,以下为学习笔记及总级
三、源码下载
1、QDateTimeEdit 日期输入框
setCalendarPopup 弹出日期选择框
setDisplayFormat("yyyy-MM-dd HH:mm:ss") 设置展示格式
2、QCalendarWidget 日历选择组件,直接是弹框形式
selectedDate 获取选择的日期
3、QDockWidget 停靠控件
setFloating(True) # 设置停靠控件悬浮状态
4、QScrollBar 滚动条控件
sliderMoved 滚动事件触发
5、QStackedWidget 堆栈窗口控件 ,使用看QStackedWidget.py
6、QMdiArea 容纳多文档的窗口 子控件QMdiSubWindow,使用查询 ScrollBar.py
7、QTabWidget 选项卡控件
addTab 添加tab页
8、QCheckBox 按钮控件,三种选中状态 0未选中、 1半选中、2选中
stateChanged 选中事件方法
setCheckState(Qt.PartiallyChecked) 设置半选中方法
9、QComboBox 下拉列表控件
currentIndexChanged 选择变化事件
10、QLineEdit 输入框控件
(1)EchoMode (回显模式)a、Normal 通用模式 b、NoEcho 不回显 c、Password c、 PasswordEchoOnEdit 编辑时显示,焦点移走,变成密码模式
(2)检验器QIntValidator、QDoubleValidator、QRegExpValidator(QRegExp)
(3)setValidator 设置检验器
11、QAbstractButton按钮基类控件,
子类有 QPushButton、QToolButton、QRadioButton、 QCheckBox
12、QSpinBox 计数器控件
valueChanged 变化事件
13、QSplider 滑块控件
valueChanged 变化事件
14、QTextEdit 编辑多行文件控件
15、(1)窗口的setWindowIcon方法用于设置窗口的图标,只有在Windows中可用
(2)QApplication中的setWindowIcon方法用于设置主窗口的图标和应用程序图标,但调用了窗口的setWindowIcon方法
(3)QApplication中的setWindowIcon方法只能用于设置应用程序图标
16、QColorDialog颜色对话框,要与调色板搭配使用,如下
color = QColorDialog.getColor()
p = QPalette()
p.setColor(QPalette.WindowText,color)
self.colorLabel.setPalette(p)
16、QDialog 对话框控件 子类有
QMessageBox、QColorDialog、QFileDialog、QFileDialog、QFontDialog、QInputDialog
例如:
QMessageBox.information(self, '消息', '消息对话框', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
QMessageBox.warning(self, '警告', '这是一个消息对话框', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
17、QApplication.clipboard() 剪贴板
18、让控件支持拖拽功能 使用请看 DrapDrop.py例子
A控件.setDragEnabled(True)
B控件.setAcceppDrops(True)
B需要两个事件
1、dragEnterEvent 将A拖到B解发
2、dropEvent 在B的区域放下A时触发
19、QPainter 绘图API,常与QBrush组件配合使用
begin(self)
end()
19、QGridLayout 栅格布局
addWidget(titleLabel, x坐标, y坐标)
20、QFormLayout 表格布局
addRow(控件1, 控件2,...)
21、QSplitter 拖动控件之间的边界
将其它控件,addWidget到QSplitter 这时里面,这样控件就可以拖拽了
22、QHBoxLayout水平布局、QVBoxLayout垂直布局
addStretch主要用在,例如:将【确定】【取消】始终在右下角位置
addStretch(0) 所占空间为0
addStretch(1) 所占空件为最大,将左右两边的控件往两边挤
setSpacing(20)设置空隔位置大小
23、QStatusBar状态栏控件
QMainWindow.addMenu 添加菜单
QMainWindow.addToolBar 添加工具栏
QMainWindow.setStatusBar(QStatusBar()) 设置状态栏
QMainWindow.setWindowOpacity(0.2)设置窗口透明度
Triggered 点击事件触发
24、QThread 实现多线程方法是继承QThread类,重写run方法,开始线程调用start()方法
配套常与QLCDNumber计数据使用
25、QTimer 定时器
timeout 绑定事件触发
start(5000) 间隔5秒触发timeout事件
stop()
26、QPageSetupDialog 打印机设置
printer = QPrinter()
(1)printDialog = QPageSetupDialog(printer , self) 打印机设置
printDialog.exec_() 弹出打印机设置
(2)printDialog = QPrintDialog(printer, self) 显示打印对话框
27、信事与槽
(1)信号与槽自动连接
a、指定 okButton.setObjectName('okButton')
b、QtCore.QMetaObject.connectSlotsByName(self) # 指定信号槽按名字来指定
c、槽函数格式为def on_okButton_clicked
(2)自定义信息号
自定义信号类,继承QObject(或其它类型),定义一个信号,如下
class MyTypeSignal(QObject):
# 定义一个信号
sendmsg = pyqtSignal(object)
# 发送3个参数的信号
sendmsg1 = pyqtSignal(str, int, int)
def run(self):
self.sendmsg.emit('Hello PyQt5')
def run1(self):
self.sendmsg1.emit('Hello', 3, 4)
自定槽类继承QObject,以及方法
class MySlot(QObject):
def get(self, msg):
print('信息:' + msg)
def get1(self, msg, a, b):
print('信息:' + msg)
print(a + b)
使用自定义
send = MyTypeSignal()
slot = MySlot()
send.sendmsg.connect(slot.get)
send.sendmsg1.connect(slot.get1)
send.run()
send.run1()
(3)使用Lambda表达式为槽函数传递参数
fun = lambda : print('hello world')
fun()
func1 = lambda x,y:print(x,y)
func1()
例如:
button1.clicked.connect(lambda: self.onButtonClick(10, 20))
(4)声明一个重载版本的信号
signal6 = pyqtSignal([int, str], [str])
# 1、声明一个重载版本的信号,也就是槽函数所参数可以是int和str两个类型,也可以只有一个str类型的参数
# 2、在绑定草信号,与发送信息时,都要指定参数类型
signal6[int, str].connect(self.signalCall6)
signal6[str].connect(self.signalCall6Overload)
signal6[int, str].emit(100, "myt test")
signal6[str].emit("test")
(5)信号槽N对N连接与断开连接
signal2.connect(self.signal1) # 注意,信号2绑在了信号1上面,由信号1去 触发槽函数
28、QTreeWidget 树控件 使用查看 BasicTreeWidget.py
setColumnCount(2) 为树控件指定列数
QTreeWidgetItem 子节点项
setCheckState(0, Qt.Checked) # 子节点添加复选框
29、QTableWidget 表格控件,继承至QTableView
setHorizontalHeaderLabels(['姓名', '性别', '体重'])
sortItems(columnIndex, orderType) 第几列排序
orderType为Qt.DescendingOrder、 Qt.DescendingOrder
QTableWidgetItem 表格控件单元格控件
tableWidget.setItem(0, 1, newItem)
30、QListWidget列表,是QListView的子类,扩展了很多方法
addItem
itemClicked 事件触发
31、QWebEngineView浏览器控件
setHtml
self.brower = QWebEngineView()
self.brower.load(QUrl.fromLocalFile(url))
self.brower.load(QUrl('https://www.jd.com'))
32、QSS样式,和CSS很类似
(1)代码设置
# 选择器
qssStyle = """
QPushButton {
background-color:red
}
"""
控件.setStyleSheet(qssStyle)
(2)加载QSS文件 使用查看LoadQSS.py
class CommonHelper:
@staticmethod
def readQSS(style):
with open(style, 'r') as f:
return f.read()
调用
styleFile = './style.qss'
qssStyle = CommonHelper.CommonHelper.readQSS(styleFile)
控件.setStyleSheet(qssStyle)
33、实现绘图应用 查看 Drawing.py
1:如何绘图
在paintEvent方法中绘图,通过调用update方法触发painEvent的调用
2:在哪绘图
在QPixmap这里面绘图
3:如何通过移动鼠标进行绘图
(1)鼠标按下 mousePressEvent
(2)鼠标移动 mouseMoveEvent
(3)鼠标抬起 mouseReleaseEvent
34、QImage 缩放图片 QImage.scaled
filename = '1.jpg'
img = QImage(filename)
result=img.scaled(label1.width(),label1.height(),Qt.IgnoreAspectRatio,Qt.SmoothTransformation)
# 让图片显示比较平滑
label1.setPixmap(QPixmap.fromImage(result))
34、QSqlDatabase 数据库组件
db = QSqlDatabase.addDatabase('QSQLITE')
# 指定SQLite数据的文件名
db.setDatabaseName('./db/database.db')
model = QSqlTableModel()
model.setTable('people')
model.setEditStrategy(QSqlTableModel.OnFieldChange)
model.select()
model.setHeaderData(0, Qt.Horizontal, 'ID')
model.setHeaderData(1, Qt.Horizontal, '姓名')
model.setHeaderData(2, Qt.Horizontal, '地址')
view = QTableView()
view.setModel(model)
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
- 83.
- 84.
- 85.
- 86.
- 87.
- 88.
- 89.
- 90.
- 91.
- 92.
- 93.
- 94.
- 95.
- 96.
- 97.
- 98.
- 99.
- 100.
- 101.
- 102.
- 103.
- 104.
- 105.
- 106.
- 107.
- 108.
- 109.
- 110.
- 111.
- 112.
- 113.
- 114.
- 115.
- 116.
- 117.
- 118.
- 119.
- 120.
- 121.
- 122.
- 123.
- 124.
- 125.
- 126.
- 127.
- 128.
- 129.
- 130.
- 131.
- 132.
- 133.
- 134.
- 135.
- 136.
- 137.
- 138.
- 139.
- 140.
- 141.
- 142.
- 143.
- 144.
- 145.
- 146.
- 147.
- 148.
- 149.
- 150.
- 151.
- 152.
- 153.
- 154.
- 155.
- 156.
- 157.
- 158.
- 159.
- 160.
- 161.
- 162.
- 163.
- 164.
- 165.
- 166.
- 167.
- 168.
- 169.
- 170.
- 171.
- 172.
- 173.
- 174.
- 175.
- 176.
- 177.
- 178.
- 179.
- 180.
- 181.
- 182.
- 183.
- 184.
- 185.
- 186.
- 187.
- 188.
- 189.
- 190.
- 191.
- 192.
- 193.