1 窗口类型
窗口类型
1、QMainWindow: 标题栏、菜单栏、工具栏、状态栏,最常见的主窗口
2、QWidget :不确定窗口的用途,就使这个
3、QDialog : 对话窗口的基类。没有菜单栏、工具栏、状态栏
"""
第一个主窗口
"""
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtGui import QIcon
class FirstMainWin(QMainWindow):
def __init__(self, parent=None):
super(FirstMainWin, self).__init__(parent)
# 设置主窗口
self.setWindowTitle("第一个主窗口")
# 设置尺寸
self.resize(400, 300)
# 设置状态栏
self.status = self.statusBar()
self.status.showMessage('只存在5s的消息', 5000)
if __name__ == '__main__':
app = QApplication(sys.argv)
# mac 不显示应用窗口的图标
app.setWindowIcon(QIcon('./images/鸭鸭1.png'))
main = FirstMainWin()
main.show()
sys.exit(app.exec_())
让窗口上下,左右居中
"""
设置窗口上下左右居中
QDesktopWidget
"""
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QDesktopWidget
class CenterForm(QMainWindow):
def __init__(self, parent=None):
super(CenterForm, self).__init__(parent)
# 设置主窗口
self.setWindowTitle("让窗口居中")
# 设置尺寸
self.resize(400, 300)
# 设置居中
self.center()
def center(self):
# 获取屏幕坐标系
screen = QDesktopWidget().screenGeometry()
# 获取窗口坐标系
win_size = self.geometry()
newLeft = (screen.width() - win_size.width()) / 2
newTop = (screen.height() - win_size.height()) / 2
# 移动位置-左上角坐标
self.move(int(newLeft), int(newTop))
if __name__ == '__main__':
app = QApplication(sys.argv)
main = CenterForm()
main.show()
sys.exit(app.exec_())
通过代码实现信号与槽,退出应用程序
"""
退出应用程序
"""
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QHBoxLayout, QPushButton
class QuitApplication(QMainWindow):
def __init__(self):
super(QuitApplication, self).__init__()
self.resize(500, 400)
self.setWindowTitle("Quit Application")
# 添加button
self.button1 = QPushButton('Quit App')
# 绑定
self.button1.clicked.connect(self.onClick_button)
# 水平布局
layout = QHBoxLayout()
layout.addWidget(self.button1)
mainFrame = QWidget()
mainFrame.setLayout(layout)
self.setCentralWidget(mainFrame)
def onClick_button(self):
"""
单击事件方法
:return:
"""
sender = self.sender()
print(sender.text() + '按钮被按下')
app = QApplication.instance()
app.quit()
if __name__ == '__main__':
app = QApplication(sys.argv)
main = QuitApplication()
main.show()
sys.exit(app.exec_())
屏幕坐标系
"""
屏幕坐标系
左上角(0,0) 坐标系
"""
import sys
from PyQt5.QtWidgets import QHBoxLayout, QApplication, QMainWindow, QPushButton, QWidget
def onClick():
print('on click')
print('1-----y不包含标题栏--height不包含标题栏------')
print('widget.x() = %d' % widget.x())
print('widget.y() = %d' % widget.y())
print('widget.width() = %d' % widget.width())
print('widget.height() = %d' % widget.height())
print('2-----y包含标题栏----height不包含标题栏----')
print('widget.geometry().x() = %d' % widget.geometry().x())
print('widget.geometry().y() = %d' % widget.geometry().y())
print('widget.geometry().width()= %d' % widget.geometry().width())
print('widget.geometry().height()= %d' % widget.geometry().height())
print('3-----y不包含标题栏--height包含标题栏--------')
print('widget.frameGeometry().x() = %d' % widget.frameGeometry().x())
print('widget.frameGeometry().y() = %d' % widget.frameGeometry().y())
print('widget.frameGeometry().width()= %d' % widget.frameGeometry().width())
print('widget.frameGeometry().height()= %d' % widget.frameGeometry().height())
app = QApplication(sys.argv)
widget = QWidget()
push_button = QPushButton(widget)
push_button.setText("按钮")
push_button.clicked.connect(onClick)
# 工作区的尺寸,不包含标题栏
widget.resize(300, 240)
widget.move(250, 200)
widget.setWindowTitle('屏幕坐标系')
widget.show()
sys.exit(app.exec_())
设置窗口图标
"""
设置窗口和应用程序图标
"""
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget
from PyQt5.QtGui import QIcon
class ApplicationIcon(QMainWindow):
def __init__(self, parent=None):
super(ApplicationIcon, self).__init__(parent)
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 300, 240)
self.setWindowTitle('Icon')
# 只有在window和linux下有效果,macos无效果
self.setWindowIcon(QIcon('./images/鸭鸭1.png'))
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setWindowIcon(QIcon('./images/鸭鸭1.png'))
main_win = ApplicationIcon()
main_win.show()
sys.exit(app.exec_())
按钮和窗口,鼠标聚焦,提示信息,
"""
提示信息
"""
import sys
from PyQt5.QtWidgets import QHBoxLayout, QMainWindow, QApplication, QPushButton, QWidget, QToolTip
from PyQt5.QtGui import QFont
class ToolTips(QMainWindow):
def __init__(self):
super(ToolTips, self).__init__()
self.initUI()
def initUI(self):
QToolTip.setFont(QFont('SansSerif', 12))
self.setToolTip('今天<b>加班</b>')
self.setGeometry(300, 300, 400, 200)
self.setWindowTitle('设置控件提示消息')
self.button = QPushButton('我的')
self.button.setToolTip('这是我的按钮')
layout = QHBoxLayout()
layout.addWidget(self.button)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = ToolTips()
main.show()
sys.exit(app.exec_())
QLabel控件
"""
QLabel控件
setAlignment 设置文本对齐方式
setIndent 设置缩进
text 获取文本内容
setBuddy 设置伙伴关系
setText 设置文本内容
selectedText 返回所选择的字符
setWordWrap 设置是否允许换行
QLabel常用的控件
1、鼠标划过,触发 linkHovered
2、单击, 触发, linkActivated
"""
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QPushButton, QLabel
from PyQt5.QtGui import QPalette, QPixmap
from PyQt5.QtCore import Qt
class QLabelDemo(QWidget):
def __init__(self):
super(QLabelDemo, self).__init__()
self.initUI()
def initUI(self):
label1 = QLabel(self)
label2 = QLabel(self)
label3 = QLabel(self)
label4 = QLabel(self)
label1.setText("<font color=yellow>文本标签</font>")
# 背景设置打开
label1.setAutoFillBackground(True)
# 设置背景
palette = QPalette()
# 设置背景色
palette.setColor(QPalette.Window, Qt.blue)
label1.setPalette(palette)
# 居中
label1.setAlignment(Qt.AlignCenter)
label2.setText("<a href='#'>Pyqt5 GUI</a>")
label2.setAlignment(Qt.AlignCenter)
label3.setToolTip('这是一个图片标签')
label3.resize(50,50)
pixmap = QPixmap('./images/鸭鸭1.png').scaled(label3.width(),label3.height())
label3.setPixmap(pixmap)
label3.setAlignment(Qt.AlignCenter)
# 打开链接,但是不会触发槽函数
label4.setOpenExternalLinks(True)
label4.setText("<a href='https://www.baidu.com'>百度一下</a>")
label4.setToolTip('百度一下')
label4.setAlignment(Qt.AlignRight)
vlayout = QVBoxLayout()
vlayout.addWidget(label1)
vlayout.addWidget(label2)
vlayout.addWidget(label3)
vlayout.addWidget(label4)
label2.linkHovered.connect(self.linkHovered)
label4.linkActivated.connect(self.linkClicked)
self.setLayout(vlayout)
self.setWindowTitle('Label 控件演示')
self.resize(500, 500)
def linkHovered(self):
print("鼠标 hover label2")
def linkClicked(self):
print('鼠标 click label4')
if __name__ == '__main__':
app = QApplication(sys.argv)
main = QLabelDemo()
main.show()
sys.exit(app.exec_())
QLabel绑定伙伴关系
"""
QLabel与伙伴关系
"""
import sys
from PyQt5.QtWidgets import QApplication, QPushButton, QLabel, QDialog, QLineEdit, \
QGridLayout
class QLabelBuddy(QDialog):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('Qlabel与伙伴关系')
nameLabel = QLabel('Name', self)
nameLineEdit = QLineEdit(self)
# 设置绑定
nameLabel.setBuddy(nameLineEdit)
passwordLabel = QLabel('Password', self)
passwordLineEdit = QLineEdit(self)
# 设置绑定
passwordLabel.setBuddy(passwordLineEdit)
btnOK = QPushButton('OK', self)
btnCancel = QPushButton('Cancel', self)
grid_layout = QGridLayout(self)
grid_layout.addWidget(nameLabel,0,0)
# 控件对象,rowIndex,columnIndex, row, column,最后两个参数指控件占用的几行几列
grid_layout.addWidget(nameLineEdit,0,1,1,2)
grid_layout.addWidget(passwordLabel,1,0)
grid_layout.addWidget(passwordLineEdit,1,1,1,2)
grid_layout.addWidget(btnOK,2,1)
grid_layout.addWidget(btnCancel,2,2)
if __name__ == '__main__':
app = QApplication(sys.argv)
dialog = QLabelBuddy()
dialog.show()
sys.exit(app.exec_())