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

首頁 > 編程 > Python > 正文

python3+PyQt5實現自定義窗口部件Counters

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

本文通過Python3+PyQt5實現自定義部件–Counters自定 窗口部件。這個窗口是3*3的網格。本文有兩個例子如下:

/home/yrd/eric_workspace/chap11/counters.py。
/home/yrd/eric_workspace/chap11/counters_dnd.py

第二個例子在第一個例子的基礎上實現能通過鼠標拖拽球到不同的網格中。

/home/yrd/eric_workspace/chap11/counters.py

#!/usr/bin/env python3from PyQt5.QtCore import (QRectF, QSize, Qt)from PyQt5.QtWidgets import (QApplication, QSizePolicy,QWidget)from PyQt5.QtGui import QPainter,QPenBLANK, RED, YELLOW = range(3)class CountersWidget(QWidget):  def __init__(self, parent=None):    super(CountersWidget, self).__init__(parent)    self.setSizePolicy(QSizePolicy(QSizePolicy.Expanding,                    QSizePolicy.Expanding))    self.grid = [[BLANK] * 3 for i in range(3)]    self.selected = [0, 0]    self.setMinimumSize(self.minimumSizeHint())  def sizeHint(self):    return QSize(200, 200)  def minimumSizeHint(self):    return QSize(100, 100)  def mousePressEvent(self, event):    xOffset = self.width() / 3    yOffset = self.height() / 3    if event.x() < xOffset:      x = 0    elif event.x() < 2 * xOffset:      x = 1    else:      x = 2    if event.y() < yOffset:      y = 0    elif event.y() < 2 * yOffset:      y = 1    else:      y = 2    cell = self.grid[x][y]    if cell == BLANK:      cell = RED    elif cell == RED:      cell = YELLOW    else:      cell = BLANK    self.grid[x][y] = cell    self.selected = [x, y]    self.update()  def keyPressEvent(self, event):    if event.key() == Qt.Key_Left:      self.selected[0] = (2 if self.selected[0] == 0                else self.selected[0] - 1)    elif event.key() == Qt.Key_Right:      self.selected[0] = (0 if self.selected[0] == 2                else self.selected[0] + 1)    elif event.key() == Qt.Key_Up:      self.selected[1] = (2 if self.selected[1] == 0                else self.selected[1] - 1)    elif event.key() == Qt.Key_Down:      self.selected[1] = (0 if self.selected[1] == 2                else self.selected[1] + 1)    elif event.key() == Qt.Key_Space:      x, y = self.selected      cell = self.grid[x][y]      if cell == BLANK:        cell = RED      elif cell == RED:        cell = YELLOW      else:        cell = BLANK      self.grid[x][y] = cell    self.update()  def paintEvent(self, event=None):    painter = QPainter(self)    painter.setRenderHint(QPainter.Antialiasing, True)    xOffset = self.width() / 3    yOffset = self.height() / 3    for x in range(3):      for y in range(3):        cell = self.grid[x][y]        rect = (QRectF(x * xOffset, y * yOffset,            xOffset, yOffset).adjusted(0.5, 0.5, -0.5, -0.5))        color = None        if cell == RED:          color = Qt.red        elif cell == YELLOW:          color = Qt.yellow        if color is not None:          painter.save()          painter.setPen(Qt.black)          painter.setBrush(color)          painter.drawEllipse(rect.adjusted(2, 2, -2, -2))          painter.restore()        if [x, y] == self.selected:          painter.setPen(QPen(Qt.blue, 3))        else:          painter.setPen(Qt.black)        painter.drawRect(rect)if __name__ == "__main__":  import sys  app = QApplication(sys.argv)  form = CountersWidget()  form.setWindowTitle("Counters")  form.show()  app.exec_()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 麻城市| 墨脱县| 普洱| 错那县| 乾安县| 神木县| 沙田区| 上蔡县| 嘉祥县| 昭通市| 南皮县| 哈密市| 新乡县| 铁力市| 普定县| 临泽县| 方山县| 苍山县| 景宁| 宜兰县| 松江区| 汨罗市| 叶城县| 津南区| 桐乡市| 大田县| 中山市| 长泰县| 阿拉善盟| 黎川县| 开原市| 中超| 葵青区| 瑞金市| 和静县| 阿拉善左旗| 凉城县| 宜兰市| 若尔盖县| 微博| 民县|