PyQt5编程(17):窗口事件

PyQt5编程(17):窗口事件,第1张

1.改变窗口状态

下列的方法可用来改变或判断窗口的状态(最小化、最大化、隐藏和显示):

from PyQt5 import QtCore, QtWidgets

class MyWindow(QtWidgets.QWidget):

def init (self, parent=None):

QtWidgets.QWidget. init (self, parent)

self.resize(300, 100)

def changeEvent(self, e):

if e.type() == QtCore.QEvent.WindowStateChange:

if self.isMinimized():

print("窗口最小化")

elif self.isMaximized():

print("窗口扮芹最大化")

elif self.isFullScreen():

print("全屏显示")

elif self.isActiveWindow():

print("活动窗口")

QtWidgets.QWidget.changeEvent(self, e)

def showEvent(self, e):

print("窗口显示")

QtWidgets.QWidget.showEvent(self, e)

def hideEvent(self, e):

print("窗口隐藏")

QtWidgets.QWidget.hideEvent(self, e)

if name == " main ":

import sys

app = QtWidgets.QApplication(sys.argv)

window = MyWindow()

window.show()

sys.exit(app.exec_())

2.改变窗谈世口的位置和尺寸

移动窗口、调整窗口尺寸时,下列方法将被调用:

from PyQt5 import QtWidgets

class MyWindow(QtWidgets.QWidget):

def init (self, parent=None):

QtWidgets.QWidget. init (self, parent)

self.resize(300, 100)

def moveEvent(self, e):

print("x = {0}y = {1}".format(e.pos().x(), e.pos().y()))

QtWidgets.QWidget.moveEvent(self, e)

def resizeEvent(self, e):

print("w = {0}h = {1}".format(e.size().width(),e.size().height()))

QtWidgets.QWidget.resizeEvent(self, e)

if name == " main ":

import sys

app = QtWidgets.QApplication(sys.argv)

window = MyWindow()

window.show()

sys.exit(app.exec_())

3.重绘窗口

当控件或控件的部分变为可见时,控件需要重绘。此时,paintEvent(self,event)被调用。event参数包含QPaintEvent类的实例,通过该类有以下方法:

4.阻止窗口关闭

通过单击窗口标题栏中的关闭按钮或调用close()方法来关闭窗口时,closeEvent(self,event)方法被调用。 通过event参数可获得QCloseEvent类的一个对象。 为了防止窗口关闭,必须通过该对象调用ignore()方法,否则调用accept()方法。

下面的例子为:单击关闭按钮将显示一个标准对话框,要求确认是否关闭该窗口。 如果用户单击“是”按钮,则关闭窗口;如果用户单击厅侍毕“否”按钮,则仅关闭对话框,窗口不会被关闭。

from PyQt5 import QtWidgets

class MyWindow(QtWidgets.QWidget):

def init (self, parent=None):

QtWidgets.QWidget. init (self, parent)

self.resize(300, 100)

def closeEvent(self, e):

result = QtWidgets.QMessageBox.question(self,

"关闭窗口确认",

"真的要关闭窗口?",

QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No,

QtWidgets.QMessageBox.No)

if result == QtWidgets.QMessageBox.Yes:

e.accept()

QtWidgets.QWidget.closeEvent(self, e)

else:

e.ignore()

if name == " main ":

import sys

app = QtWidgets.QApplication(sys.argv)

window = MyWindow()

window.show()

sys.exit(app.exec_())

使用Qt进行软件禅和开发,不可避免要使用资源文件。本节我们做一个简单示例,通过使用Qt资源文件为应用程序及关闭按钮设置图标。

根据前面我们所讲述的内容,先创建PyCharm工程项目,然后创建Qt工程项目,在Qt工程项目中设计界面并创建资源文件。

界面中我们只放置一个“关闭”按钮,所以在此不做具体的描述。下面,我们创建资源文件。

在Qt Creator中选择“File” ->"New File or Project...",然后选择“Qt”->"Qt Resource File",在File name中输入res,在项目中可以看到,我们创建了一个res.qrc资源文件。

在资源文件上右击,选择”Open in Editor“即可打开资源文件编辑器。

在资源文件中首先需要创建一个前缀,名称可以根据具体的资源进行命名,我们在此处命名为:icons;然后单击”Add Files“,选择事先准档岩备好的图标文件添加进来。

在按钮贺蠢盯的属性编辑器中找到icon属性,点击下拉菜单中的”Choose Resource...“,在对话框中选择对应的资源文件中的图标即可。

编译资源文件:

在PyCharm的工程项目中创建一个名为rcc.bat的批处理文件,其代码如下:

注意:编译资源文件时,生成的py文件名结尾必须是_rc,因为编译窗体文件后会产生如下语句:

编译窗体文件:

在PyCharm的工程项目中创建一个名为uic.bat的批处理文件,其代码如下:

运行以上两个批处理文件,可以看到编译后的py文件已经生成。

执行程序后可以看到,界面中的关闭按钮显示了我们在Qt Creator中设置的图标。

引入图标类:

在主程序中app = QApplication(sys.argv)语句后面增加设置图标的代码:

为”关闭“按钮添加单击事件代码:

运行程序即可看到应用程序的图标也可以显示了。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12559715.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存