PyQt5学习笔记——基本窗口组件(1)
2020-04-06 本文已影响0人
SS小鱼干
最近在看PyQt5方面的教材,简单整理汇总便于查阅;因为过于简略如果希望于深入的学习还是应该啃书本吧~
- QMainWindow 窗口可以包含菜单栏、工具栏、状态栏、标题栏等,是最常见的窗口形式,也可以说是GUI程序的主窗口
- QDialog 是对话框窗口的基类。对话框主要用来执行短期任务,或者与用户进行互动,它可以是模态的,也可以是非模态的。
- 如果是主窗口,就使用QMainWindow类;如果是对话框,就使用 QDialog类;如果不确定,或者有可能作为顶层窗口,也有可能嵌入到其他窗口中,那么就使用QWidget类。
QMainWindow
QMainWindow继承自QWidget类,拥有它的所有派生方法和属性。
常用方法
imageQMainWindow不能设置布局(使用setLayout()方法),因为它有自己的布局。
QWidget
基础窗口控件QWidget类是所有用户界面对象的基类,所有的窗口和控件都直接或间接继承自QWidget类。
坐标系统
image- 整个屏幕的坐标系统就用来定位顶层窗口的
- 在窗口内部也有自己的坐标系统,该坐标系统仍然以左上角作为原点,从左向右为x轴正向,从上向下为y轴正向,原点、x轴、y轴围成的区域叫作Client Area(客户区),在客户区的周围则是标题栏(Window Title)和边框(Frame)。
最简单的窗口
import sys
from PyQt5.QtWidgets import QApplication,QWidget
app=QApplication(sys.argv) # 每一个 PyQt5 程序都需要有一个 QApplication 对象,QApplication 类包含在QTWidgets模块中。sys.argv 是一个命令行参数列表。
window=QWidget()
window.resize(300,200)
window.move(250,150)
window.setWindowTitle('Hello PyQt5')
window.show() # 使用show()方法将窗口控件显示在屏幕上。
sys.exit(app.exec_()) # 最后进入该程序的主循环。事件处理从本行代码开始,主循环接收事件消息并将其分发给程序的各个控件。
- 窗口和控件都继承自QWidget类,如果不为控件指定一个父对象,那么该控件就会被当作窗口处理
- 如果调用 exit()或主控件被销毁,主循环就会结束。使用 sys.exit()方法退出可以确保程序完整地结束,在这种情况下系统的环境变量会记录程序是如何退出的。
- 如果程序运行成功,那么exec_()的返回值为0,否则为非0。
QLabel
QLabel对象作为一个占位符可以显示不可编辑的文本或图片,也可以放置一个GIF 动画,还可以被用作提示标记为其他控件。纯文本、链接或富文本可以显示在标签上。
继承关系
image常用方法 image
常用信号 image
使用QLabel
from PyQt5.QtWidgets import QApplication, QLabel ,QWidget, QVBoxLayout
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap ,QPalette
import sys
class WindowDemo(QWidget):
def __init__(self ):
super().__init__()
label1 = QLabel(self)
label2 = QLabel(self)
label3 = QLabel(self)
label4 = QLabel(self)
label1.setText("这是一个文本标签。")
label1.setAutoFillBackground(True)
palette = QPalette()
palette.setColor(QPalette.Window,Qt.blue)
label1.setPalette(palette)
label1.setAlignment( Qt.AlignCenter)
label2.setText("<a href='#'>欢迎使用Python GUI 应用</a>")
label3.setAlignment( Qt.AlignCenter)
label3.setToolTip('这是一个图片标签')
label3.setPixmap( QPixmap("./images/python.jpg"))
label4.setText("<A href='http://www.cnblogs.com/wangshuo1/'>欢迎访问信平的小屋</a>")
label4.setAlignment( Qt.AlignRight)
label4.setToolTip('这是一个超链接标签')
vbox = QVBoxLayout()
vbox.addWidget(label1)
vbox.addStretch()
vbox.addWidget(label2)
vbox.addStretch()
vbox.addWidget( label3 )
vbox.addStretch()
vbox.addWidget( label4)
label1.setOpenExternalLinks(True)
# 打开允许访问超链接,默认是不允许,需要使用 setOpenExternalLinks(True)允许浏览器访问超链接
label4.setOpenExternalLinks( False )
# 点击文本框绑定槽事件
label4.linkActivated.connect( link_clicked )
# 划过文本框绑定槽事件
label2.linkHovered.connect( link_hovered )
label1.setTextInteractionFlags( Qt.TextSelectableByMouse )
self.setLayout(vbox)
self.setWindowTitle("QLabel 例子")
def link_hovered():
print("当鼠标滑过label-2标签时,触发事件。")
def link_clicked():
print("当鼠标点击label-4标签时,触发事件。" )
if __name__ == "__main__":
app = QApplication(sys.argv)
win = WindowDemo()
win.show()
sys.exit(app.exec_())
文本框类控件
QLineEdit
QLineEdit类是一个单行文本框控件,可以输入单行字符串。如果需要输入多行字符串,则使用QTextEdit类。
常用方法 image
常用信号 image
相关掩码 image
示例: image其他
- 在通常情况下,我们会对用户的输入做一些限制,可以通过验证器来进行。常见的验证器有:整型验证器、浮点型验证器及其他自定义验证器。
QTextEdit
QTextEdit类是一个多行文本框控件,可以显示多行文本内容,当文本内容超出控件显示范围时,可以显示水平个垂直滚动条。