java窗口最大化事件

首页 > 技术 > 作者:YD1662023-02-18 19:48:30

java窗口最大化事件,(1)

窗口事件包括改变窗口状态、调整位置和尺寸、窗口绘制、窗口关闭事件等。

改变窗口状态

下面的方法用来改变或判断窗口的状态,包括最小化,最大化,隐藏,显示等。

调整窗口位置和尺寸

当移动窗口时,会调用moveEvent()方法;窗口的尺寸发生改变时,会调用resizeEvent()方法。

pos():返回包括窗口当前坐标的QPoint类对象;

oldPos():返回包括窗口移动前坐标的QPoint类对象。

size():返回包括窗口当前尺寸的QSize类对象;

oldSize():返回包括窗口调整前尺寸的QSize类对象

窗口重绘

当控件或者控件的部分可见时,控件需要重绘。这时,将调用paintEvent(self, evnet)执行重绘动作。event参数包含QPaintEvent类的实例,通过该类的以下方法可以区域信息:

rect():返回包含需要重绘区域的QRect类的对象

region():返回包含需要重绘区域的QRegiont类的对象

通过以上函数,可以确定部件的重绘窗口区域,重绘区域有可能只是控件的某一部分而不是整个控件,这样做,可以大大提高重绘的效率。Qt在重绘的时候,为了提高效率,会将多个重绘事件组合在一起处理。因此,需要立即重绘时,需要QWidget的repaint()或update()方法来执行重绘操作

repaint(): 立即调用paintEvent()重绘。只要控件不是隐藏状态,不受setUpdatesEnabed()影响。函数格式有:repaint(),repaint(X,Y,Width,Height), repaint(QRect), repaint(QRegion)。

update():发送需要重新绘制控件的消息。如果控件不是隐藏状态,更新不被禁止。该事件将在主应用程序的事件循环中处理。如果一次有几个update()消息,系统则会将它们合并成一个消息,避免产生屏幕闪烁。建议使用此方法而不是repaint()。函数格式有:update (),update (X,Y,Width,Height), update (QRect), update (QRegion)。

窗口关闭

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

测试代码

importsys fromPyQt5importQtCore,QtGui,QtWidgets fromPyQt5.QtCoreimportQt,QEvent fromPyQt5.QtGuiimport(QPainter,QWindowStateChangeEvent,QPaintEvent, QShowEvent,QHideEvent,QFont,QBrush) fromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QWidget,QMenu,QMessageBox, QStatusBar,QFrame,QPushButton,QHBoxLayout,QVBoxLayout, QInputDialog) classMyWidget(QFrame): def__init__(self,parent=None): super(MyWidget,self).__init__(parent) self.text='Hello,PythonWorld' #窗口重绘事件 defpaintEvent(self,evt): painter=QPainter(self) painter.setFont(QFont(self.font().family(),20)) painter.setPen(Qt.blue) painter.drawText(self.rect(),Qt.AlignCenter,self.text) defsetText(self,text): self.text=text #通知窗口重绘 self.update() defshowEvent(self,evt): print('显示文本窗口') QWidget.showEvent(self,evt) defhideEvent(self,evt): print('隐藏文本窗口') QWidget.hideEvent(self,evt) classWindowEventDemo(QMainWindow): def__init__(self,parent=None): super(WindowEventDemo,self).__init__(parent) #设置窗口标题 self.setWindowTitle('实战PyQt5:窗口事件演示') #设置窗口大小 self.resize(400,320) self.initUi() definitUi(self): self.sBar=QStatusBar(self) self.setStatusBar(self.sBar) mainWidget=QWidget() mainLayout=QVBoxLayout() self.showText=MyWidget() btnSetText=QPushButton('设置显示文本') btnSetText.clicked.connect(self.onButtonSetTextClicked) self.btnShowWindow=QPushButton('隐藏窗口') self.btnShowWindow.clicked.connect(self.onButtonShowWindow) self.showWindow=True hLayout=QHBoxLayout() hLayout.addWidget(self.btnShowWindow) hLayout.addWidget(btnSetText) mainLayout.addLayout(hLayout) mainLayout.addWidget(self.showText) mainWidget.setLayout(mainLayout) self.setCentralWidget(mainWidget) defchangeEvent(self,evt): ifevt.type()==QEvent.WindowStateChange: ifself.isMinimized(): print('最小化窗口') elifself.isMaximized(): self.sBar.showMessage('最大化窗口',1000) print('最大化窗口') elifself.isFullScreen(): self.sBar.showMessage('全屏显示',1000) print('全屏显示') elifself.isActiveWindow(): print('活动窗口') QWidget.changeEvent(self,evt) defmoveEvent(self,evt): info='x={0};y={1}'.format(evt.pos().x(),evt.pos().y()) self.sBar.showMessage(info,1000) defresizeEvent(self,evt): info='w={0};h={1}'.format(evt.size().width(),evt.size().height()) self.sBar.showMessage(info,1000) #窗口关闭事件 defcloseEvent(self,evt): result=QMessageBox.question(self,'关闭应用','确定关闭应用?', QMessageBox.Yes|QMessageBox.No,QMessageBox.No) ifresult==QMessageBox.Yes: evt.accept() QWidget.closeEvent(self,evt) else: evt.ignore() self.sBar.showMessage('忽略关闭事件',1000) defonButtonSetTextClicked(self): text,ok=QInputDialog.getText(self,'文本输入对话框','请输入要显示的文本') ifok: self.showText.setText(text) defonButtonShowWindow(self): ifself.showText.isVisible(): self.btnShowWindow.setText('显示窗口') self.showText.hide() else: self.btnShowWindow.setText('隐藏窗口') self.showText.show() if__name__=='__main__': app=QApplication(sys.argv) window=WindowEventDemo() window.show() sys.exit(app.exec())

运行结果如下图:

java窗口最大化事件,(2)

窗口事件测试

本文知识点

欢本文内容就关注, 收藏,点赞,评论和转发。

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.