过年的时候学习啦pyqt,不怎么用,都快忘记知识点啦。
开始写下吧,好记性不如烂笔头。
窗口类控件
QMainWindow
详细描述
QMainWindow类提供一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应用程序窗口。
主窗口通常用在提供一个大的中央窗口部件(例如文本编辑或者绘制画布)以及周围菜单、工具条和一个状态条。QMainWindow常常被继承,因为这使得封装中央部件、菜单和工具条以及窗口状态变得更容易。继承使创建当用户点击菜单项或者工具条按钮时被调用的槽成为可能。你也可以使用Qt设计器来创建主窗口。我们将简要地回顾一下有关添加菜单项和工具条按钮,然后描述QMainWindow自己的便捷。
QWidget类是所有用户界面对象的基类。
窗口部件是用户界面的一个原子:它从窗口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己的表现。每一个窗口部件都是矩形,并且它们按Z轴顺序排列的。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。
QDialog是最普通的顶级窗口。不被嵌入到一个父窗口部件的窗口部件被叫做顶级窗口部件。通常情况下,顶级窗口部件是有框架和标题栏的窗口(尽管如果使用了一定的窗口部件标记,创建顶级窗口部件时也可能没有这些装饰。)在Qt中,QMainWindow和和不同的QDialog的子类是最普通的顶级窗口。
PyQT5中主窗口例子
''' 【简介】 PyQT5中主窗口例子 '''
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtGui import QIcon
class MainWidget(QMainWindow):
def __init__(self, parent=None):
super(MainWidget, self).__init__(parent)
# 设置主窗体标签
self.setWindowTitle("QMainWindow 例子")
self.resize(400, 200)
self.status = self.statusBar()
self.status.showMessage("这是状态栏提示", 5000)#5秒显示
if __name__ == "__main__":
app = QApplication(sys.argv)
app.setWindowIcon(QIcon("limi.jpg"))
main = MainWidget()
main.show()
sys.exit(app.exec_())
将窗口放在中间
QDesktopWidget
# -*- coding: utf-8 -*-
''' 【简介】 PyQT5将窗口放在屏幕中间例子 '''
from PyQt5.QtWidgets import QDesktopWidget, QApplication ,QMainWindow
import sys
class Winform( QMainWindow):
def __init__(self, parent=None):
super( Winform, self).__init__(parent)
self.setWindowTitle('主窗口放在屏幕中间例子')
self.resize(370, 250)
self.center()
def center(self):
screen = QDesktopWidget().screenGeometry() #屏膜
size = self.geometry() #窗口
self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)
if __name__ == "__main__":
app = QApplication(sys.argv)
win = Winform()
win.show()
sys.exit(app.exec_())
screen = QDesktopWidget().screenGeometry() #屏膜
size = self.geometry() #窗口
关闭主窗口
# -*- coding: utf-8 -*-
''' 【简介】 PyQT5中关闭窗体例子 '''
from PyQt5.QtWidgets import QMainWindow,QHBoxLayout, QPushButton , QApplication, QWidget
import sys
class WinForm(QMainWindow):
def __init__(self, parent=None):
super(WinForm, self).__init__(parent)
self.resize(330, 100)
self.setWindowTitle('关闭主窗口例子')
self.button1 = QPushButton('关闭主窗口')
self.button1.clicked.connect(self.onButtonClick)
layout = QHBoxLayout() #水平布局
layout.addWidget(self.button1)
main_frame = QWidget()
main_frame.setLayout(layout)
self.setCentralWidget(main_frame)
def onButtonClick(self ):
#sender 是发送信号的对象,此处发送信号的对象是button1按钮
sender = self.sender()
print( sender.text() + ' 被按下了' )
qApp = QApplication.instance()
qApp.quit()
if __name__ == "__main__":
app = QApplication(sys.argv)
form = WinForm()
form.show()
sys.exit(app.exec_())
为窗口设置图标
import sys
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QWidget, QApplication
# 1
class Icon(QWidget):
def __init__(self, parent=None):
super(Icon, self).__init__(parent)
self.initUI()
# 2
def initUI(self):
self.setGeometry(300, 300, 250, 150)#设置窗口显示位置,x,y,w,h
self.setWindowTitle('演示程序图标例子')
self.setWindowIcon(QIcon('yangmi.jpg'))
if __name__ == '__main__':
app = QApplication(sys.argv)
icon = Icon()
icon.show()
sys.exit(app.exec_())
显示气泡提示信息
# -*- coding: utf-8 -*-
''' 【简介】 PyQT5中气泡提示 '''
import sys
from PyQt5.QtWidgets import QWidget, QToolTip, QApplication,QPushButton,QHBoxLayout
from PyQt5.QtGui import QFont
class Winform(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
QToolTip.setFont(QFont('SansSerif', 10))
self.button1 = QPushButton('我是按钮')
self.button1.setToolTip('这是一个按钮')
self.setGeometry(200, 300, 400, 400)#x,y,w,h
self.setWindowTitle('气泡提示demo')
layout = QHBoxLayout()#水平布局
layout.addWidget(self.button1)
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = Winform()
win.show()
sys.exit(app.exec_())
QLabel
方法 描述
setAlignment() 按固定值方式对齐文本
Qt.AlignLeft:水平方向靠左对齐
Qt.AlignRight:水平方向靠右对齐
Qt.AlignCenter:水平方向居中对齐
Qt.AlignJustify:水平方向调整间距两端对齐
Qt.AlignTop:垂直方向靠上对齐
Qt.AlignBottom:垂直方向靠下对齐
Qt.AlignVCenter:垂直方向居中对齐
serIndent() 设置文本缩进值
setPixmap() 设置QLabel为一个Pixmap图片
text() 获得Qlabel的文本内容
setText() 设置Qlabel的文本内容
selectedText() 返回所选择的字符
setBuddy() 设置QLabel的助记符及buddy(伙伴),及使用Qlabel设置快捷键,会在快捷键后将焦点设置到其buddy上,这里用到了Qlabel的交互控件功能 ,此外,buddy可以是任何一个widget控件,使用setBuddy(QWidget*)设置,其Qlabel必须是文本内容,并且使用“&”符号设置了助记符
setWordWrap() 设置是否允许换行
信号:
linkActiveted:当单击标签中的超链接,希望在新窗口打开这个超链接时,setOpenExternalLinks特性必须设置为True,setOpenExternalLinks(True)
linkHovered :当鼠标指针滑过标签中嵌入的超链接时,需要用槽函数与这个信号进行绑定
# -*- coding: utf-8 -*-
''' 【简介】 PyQT5中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)
# 1
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("duoren.jpg"))
label4.setText("<A href='https://blog.csdn.net/KOBEYU652453/'>欢迎访问总裁余的博客</a>")
label4.setAlignment(Qt.AlignRight)
label4.setToolTip('这是一个超链接标签')
# 2
vbox = QVBoxLayout()
vbox.addWidget(label1)
vbox.addStretch()
vbox.addWidget(label2)
vbox.addStretch()
vbox.addWidget(label3)
vbox.addStretch()
vbox.addWidget(label4)
# 3
label1.setOpenExternalLinks(True)
# 打开允许访问超链接,默认是不允许,需要使用 setOpenExternalLinks(True)允许浏览器访问超链接
label4.setOpenExternalLinks(True)
# 点击文本框绑定槽事件
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_())
代码分析python label1.setAlignment(Qt.AlignCenter)
设置文本居中,label1和label4设置啦超链接,label4.setOpenExternalLinks(True)
可以在浏览器里打开这个链接。
Qlbel快捷键例子
# -*- coding: utf-8 -*-
''' 【简介】 PyQt5中Qlabel例子 按住 Alt + N , Alt + P , Alt + O , Alt + C 切换组件控件 '''
from PyQt5.QtWidgets import *
import sys
class QlabelDemo(QDialog):
def __init__(self):
super().__init__()
self.setWindowTitle('Qlabel 例子')
nameLb1 = QLabel('&Name', self)
nameEd1 = QLineEdit(self)
nameLb1.setBuddy(nameEd1)
nameLb2 = QLabel('&Password', self)
nameEd2 = QLineEdit(self)
nameLb2.setBuddy(nameEd2)
btnOk = QPushButton('&OK')
btnCancel = QPushButton('&Cancel')
mainLayout = QGridLayout(self)
mainLayout.addWidget(nameLb1, 0, 0)
mainLayout.addWidget(nameEd1, 0, 1, 1, 2)
mainLayout.addWidget(nameLb2, 1, 0)
mainLayout.addWidget(nameEd2, 1, 1, 1, 2)
mainLayout.addWidget(btnOk, 2, 1)
mainLayout.addWidget(btnCancel, 2, 2)
def link_hovered():
print("当鼠标滑过label-2标签时,触发事件。")
def link_clicked():
print("当鼠标点击label-4标签时,触发事件。")
if __name__ == "__main__":
app = QApplication(sys.argv)
labelDemo = QlabelDemo()
labelDemo.show()
sys.exit(app.exec_())
PyQt5中Qlabel例子
按住 Alt + N , Alt + P , Alt + O , Alt + C 切换组件控件
QLineEdit
setText():设置文本
text():返回文本内容
# -*- 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_())
在这个例子中,演示了使用QLineEdit对象的一些方法
第一个文本框e1,显示文本使用自定义字体,右对齐,允许输入整数
第二个文本框e2,限制输入小数点后两位
第三个文本框e3,需要一个输入掩码应用于电话号码
第四个文本框e4,需要发射信号textChanged,链接到槽函数textChanged()
第五个文本框e5,设置显示模式EchoMode为Password需要发射editingfinished信号连接到槽函数enterPress(),一旦用户按下回车键,该函数就会执行
第六个文本框e6,显示一个默认的文本,不能编辑,设置为只读
QTextEdit
常用方法:
setPlainText():设置多行文本框的内容。
toPlainText():返回多行文本框的文本内容。
setHtml():设置多行文本框的内容为HTML文档。
toHtml():返回多行文本框的HTML文档内容。
clear():清除多行文本框的内容。
-*- coding: utf-8 -*-
''' 【简介】 PyQt5中 QTextEdit例子 '''
from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit, QVBoxLayout, QPushButton
import sys
class TextEditDemo(QWidget):
def __init__(self, parent=None):
super(TextEditDemo, self).__init__(parent)
self.setWindowTitle("QTextEdit 例子")
self.resize(300, 270)
self.textEdit = QTextEdit()
self.btnPress1 = QPushButton("显示文本")
self.btnPress2 = QPushButton("显示HTML")
layout = QVBoxLayout()
layout.addWidget(self.textEdit)
layout.addWidget(self.btnPress1)
layout.addWidget(self.btnPress2)
self.setLayout(layout)
self.btnPress1.clicked.connect(self.btnPress1_Clicked)
self.btnPress2.clicked.connect(self.btnPress2_Clicked)
def btnPress1_Clicked(self):
self.textEdit.setPlainText("Hello PyQt5!\n点击按钮")
def btnPress2_Clicked(self):
self.textEdit.setHtml("<font color='red' size='6'><red>Hello PyQt5!\n点击按钮。</font>")
if __name__ == "__main__":
app = QApplication(sys.argv)
win = TextEditDemo()
win.show()
sys.exit(app.exec_())
后续持续将之前学习的qt,整理成笔记,方便以后查阅。
电气专业的计算机小白,写博文不容易。如果你觉得本文对你有用,请点个赞支持下。