国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python3+PyQt5重新實現QT事件處理程序

2020-02-22 23:44:38
字體:
來源:轉載
供稿:網友

本文是對《Python Qt GUI快速編程》的第10章的例子events用Python3+PyQt5進行改寫,涉及到重新實現QWidget的事件處理程序。本例子涉及到上下文菜單,鼠標事件,鍵盤事件,可作為重新實現事件處理程序的參考。

注:在創建上下文菜單最簡單的方式使用Qwidget.addAction()把動作添加到窗口部件中,再把窗口部件的上下文菜單策略設置為Qt.ActionsContextMenu即可,但是如果像本例子一樣要根據不同的狀態來提供不同的選項,則要重新實現上下文菜單事件處理程序。

#!/usr/bin/env python3import sysfrom PyQt5.QtCore import (QEvent, QTimer, Qt)from PyQt5.QtWidgets import (QApplication, QMenu, QWidget)from PyQt5.QtGui import QPainterclass Widget(QWidget):  def __init__(self, parent=None):    super(Widget, self).__init__(parent)    self.justDoubleClicked = False    self.key = ""    self.text = ""    self.message = ""    self.resize(400, 300)    self.move(100, 100)    self.setWindowTitle("Events")    QTimer.singleShot(0, self.giveHelp) # Avoids first resize msg  def giveHelp(self):    self.text = "Click to toggle mouse tracking"    self.update()  def closeEvent(self, event):    print("Closed")  def contextMenuEvent(self, event):    menu = QMenu(self)    oneAction = menu.addAction("&One")    twoAction = menu.addAction("&Two")    oneAction.triggered.connect(self.one)    twoAction.triggered.connect(self.two)    if not self.message:      menu.addSeparator()      threeAction = menu.addAction("Thre&e")      threeAction.triggered.connect(self.three)    menu.exec_(event.globalPos())  def one(self):    self.message = "Menu option One"    self.update()  def two(self):    self.message = "Menu option Two"    self.update()  def three(self):    self.message = "Menu option Three"    self.update()  def paintEvent(self, event):    text = self.text    i = text.find("/n/n")    if i >= 0:      text = text[0:i]    if self.key:      text += "/n/nYou pressed: {0}".format(self.key)    painter = QPainter(self)    painter.setRenderHint(QPainter.TextAntialiasing)    painter.drawText(self.rect(), Qt.AlignCenter, text)    if self.message:      painter.drawText(self.rect(), Qt.AlignBottom|Qt.AlignHCenter,               self.message)      QTimer.singleShot(5000, self.clearMessage)      QTimer.singleShot(5000, self.update)  def clearMessage(self):    self.message=""  def resizeEvent(self, event):    self.text = "Resized to QSize({0}, {1})".format(              event.size().width(), event.size().height())    self.update()  def mouseReleaseEvent(self, event):    if self.justDoubleClicked:      self.justDoubleClicked = False    else:      self.setMouseTracking(not self.hasMouseTracking())      if self.hasMouseTracking():        self.text = "Mouse tracking is on./n"+/            "Try moving the mouse!/n"+/            "Single click to switch it off"      else:        self.text = "Mouse tracking is off./n"+/                      "Single click to switch it on"      self.update()  def mouseMoveEvent(self, event):    if not self.justDoubleClicked:      globalPos = self.mapToGlobal(event.pos())      self.text = "The mouse is at/nQPoint({0}, {1}) "+/          "in widget coords, and/n"+/          "QPoint({2}, {3}) in screen coords".format(          event.pos().x(), event.pos().y(), globalPos.x(),          globalPos.y())      self.update()  def mouseDoubleClickEvent(self, event):    self.justDoubleClicked = True    self.text = "Double-clicked."    self.update()  def keyPressEvent(self, event):    self.key = ""    if event.key() == Qt.Key_Home:      self.key = "Home"    elif event.key() == Qt.Key_End:      self.key = "End"    elif event.key() == Qt.Key_PageUp:      if event.modifiers() & Qt.ControlModifier:        self.key = "Ctrl+PageUp"      else:        self.key = "PageUp"    elif event.key() == Qt.Key_PageDown:      if event.modifiers() & Qt.ControlModifier:        self.key = "Ctrl+PageDown"      else:        self.key = "PageDown"    elif Qt.Key_A <= event.key() <= Qt.Key_Z:      if event.modifiers() & Qt.ShiftModifier:        self.key = "Shift+"      self.key += event.text()    if self.key:      self.key = self.key      self.update()    else:      QWidget.keyPressEvent(self, event)  def event(self, event):    if (event.type() == QEvent.KeyPress and      event.key() == Qt.Key_Tab):      self.key = "Tab captured in event()"      self.update()      return True    return QWidget.event(self, event)if __name__ == "__main__":  app = QApplication(sys.argv)  form = Widget()  form.show()  app.exec_()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁蒗| 海安县| 会东县| 台中市| 崇明县| 澄江县| 内乡县| 平昌县| 红河县| 诸城市| 泸溪县| 利川市| 保亭| 措美县| 昌吉市| 扎囊县| 桐城市| 长顺县| 安阳县| 曲阳县| 遂宁市| 镇宁| 彭阳县| 乌兰浩特市| 灵宝市| 安康市| 五原县| 灌云县| 门源| 麦盖提县| 三都| 苍溪县| 盘锦市| 竹北市| 义乌市| 叙永县| 沂南县| 凌云县| 平阴县| 文成县| 沧源|