当前位置:首页 > 技术 >

java窗口最大化事件

来源:原点资讯(www.yd166.com)时间:2023-02-18 19:48:30作者:YD166手机阅读>>

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

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

改变窗口状态

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

  • changeEvent(self,event): 当控件的窗口状态的状态发生变化时调用。event参数包含QwindowStateChangeEvent类实例。
  • showEvent(self,event):当控件显示时调用。event参数包含QShowEvent类的实例。
  • hideEvent(self,event):当控件隐藏时调用。event参数包含QHideEvent类的实例。
调整窗口位置和尺寸

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

  • moveEvent(self,event):窗口移动时,将持续调用该方法。event参数包含QMoveEvent类的实例,通过该类的下列方法获得窗口信息:

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

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

  • resizeEvent(self,event):调整窗口尺寸时,将持续调用该方法。event参数包含QResizeEvent类的实例,通过该类的下列方法获得窗口信息:

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)

窗口事件测试

本文知识点
  • 窗口状态事件;
  • 窗口位置和尺寸事件;
  • 窗口重绘事件;
  • 窗口关闭事件;
  • 使用QPainter绘制文字信息。

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

栏目热文

java窗口调不了大小(java怎么设置窗口大小不可调整)

java窗口调不了大小(java怎么设置窗口大小不可调整)

1、Java GUI 概述GUI(Graphical User Interface,简称 GUI,图形用户界面)是指采用...

2023-02-18 19:38:03查看全文 >>

玉米一穴留两株还是三株好(玉米一穴一棵还是一穴双棵好)

玉米一穴留两株还是三株好(玉米一穴一棵还是一穴双棵好)

玉米是我国主要的粮食作物之一,近些年来,为了更好的带动玉米种植发展,提高玉米的种植效益,部分农户放弃以往传统的单株种植模...

2023-02-18 19:16:16查看全文 >>

玉米一穴2株好还是三株好

玉米一穴2株好还是三株好

↓(文章底部,有视频讲解版,不喜欢看文字的,可以直接到底部点击播放)↓玉米一穴双株比常规单株种植高产吗?大讨论! 近些天...

2023-02-18 19:02:56查看全文 >>

高产玉米一穴五株种植方法(玉米一穴多株高产种植技术)

高产玉米一穴五株种植方法(玉米一穴多株高产种植技术)

许多农民在种植玉米的过程中,对玉米的种植密度有一些误解。一些人还认为,种植得越密越好,不过这种种植方式,会导致种植的玉米...

2023-02-18 19:17:17查看全文 >>

玉米一穴多株种植方法

玉米一穴多株种植方法

玉米是我国主要的粮食作物之一,近些年来,为了更好的带动玉米种植发展,提高玉米的种植效益,部分农户放弃以往传统的单株种植模...

2023-02-18 19:06:07查看全文 >>

java设置窗口大小不可变(java窗口怎么去掉收缩和扩大)

java设置窗口大小不可变(java窗口怎么去掉收缩和扩大)

一、Jdk常用的包java.lang: 这个是系统的基础类,比如String、Math、Integer、System和T...

2023-02-18 19:36:14查看全文 >>

java怎么将代码缩小和放大(java代码字体怎么放大)

java怎么将代码缩小和放大(java代码字体怎么放大)

了解如何修改 Java 命令行参数。Java 命令行参数使程序员能够在程序执行期间传递参数如何检查代码是否无错,在所有情...

2023-02-18 19:23:36查看全文 >>

java的窗口中文字大小怎么设置

java的窗口中文字大小怎么设置

顾名思义,字间距指的是行内文字之间的距离,而行间距的意思则是段落中各行文字之间的垂直距离。我们可以通过调整字间距和行间距...

2023-02-18 19:10:21查看全文 >>

java中如何设置窗口大小(java中怎样调节窗口大小)

java中如何设置窗口大小(java中怎样调节窗口大小)

在第一次使用 Eclipse 编写程序时,由于 Eclipse 默认使用的是 Cosnolas 字体,字号为 10,所以...

2023-02-18 19:03:02查看全文 >>

济南200米以上高楼有多少座

济南200米以上高楼有多少座

记者 夏侯凤超6月9日,绿地山东国际金融中心428米超高层项目核心筒正式封顶,“齐鲁第一高”登峰齐鲁之巅。省城天际线刷新...

2023-02-18 19:28:07查看全文 >>

文档排行