lightninng 发表于 2015-5-25 19:12:53

wei_Y 发表于 2015-5-25 17:22
下次加点注释呗。。

好的,代码超过一定行数我会加注释的{:9_217:}

lightninng 发表于 2015-5-25 20:37:23

shinima 发表于 2015-5-25 19:09
楼楼的帖子非常棒
现在网上很多教程是Qt4的, 很多函数名,变量名和Qt5都不太一样, 初学者就会很 ...

谢谢支持,欢迎交流~~{:9_240:}

kwen24 发表于 2015-5-27 19:33:11

留下脚印,谢谢楼主:handshake

lightninng 发表于 2015-5-27 22:05:12

kwen24 发表于 2015-5-27 19:33
留下脚印,谢谢楼主

欢迎多交流~~{:9_231:}

lightninng 发表于 2015-5-28 13:09:57

~风介~ 发表于 2015-5-12 19:26
过个一两百年也许会变!

原来是限时精华{:9_234:}

~风介~ 发表于 2015-5-28 15:54:18

lightninng 发表于 2015-5-28 13:09
原来是限时精华

什么情况...{:9_241:}

lightninng 发表于 2015-5-28 19:02:29

本主题由 System 于 2015-5-16 21:00 解除限时精华~~{:9_240:}

小皮猪 发表于 2015-5-28 21:38:32

你好楼主,最近我在写一个pyqt5的程序,前台只有一个滚动条,这需要后台的程序根据磁盘的大小比例调节滚动条的数值,在网上看说应该用多线程,一个线程处理界面,一个线程处理数据。请问该怎么写呢

lightninng 发表于 2015-5-29 00:02:18

小皮猪 发表于 2015-5-28 21:38
你好楼主,最近我在写一个pyqt5的程序,前台只有一个滚动条,这需要后台的程序根据磁盘的大小比例调节滚动 ...

滚动条是指拉动页面滚动的那个条么,我还没学到~~!{:9_240:}

小皮猪 发表于 2015-5-29 20:50:52

lightninng 发表于 2015-5-29 00:02
滚动条是指拉动页面滚动的那个条么,我还没学到~~!

哦,错了,应该是进度条,我研究会了,谢谢

lightninng 发表于 2015-5-29 23:00:24

小皮猪 发表于 2015-5-29 20:50
哦,错了,应该是进度条,我研究会了,谢谢

好的,欢迎交流~~{:9_232:}

lightninng 发表于 2015-6-1 14:42:09

本帖最后由 lightninng 于 2021-11-20 14:47 编辑

11.4.4 方块颜色显然直接用内置的fillRect方法绘制的方块太丑了,随便上网就能找到一大把好的素材,下面说说怎么把方块变的好看一些。分析了教程的代码,可以知道方块的绘制是用draw_squre方法完成的,看看改了之后的draw_squre代码。    def draw_square(self, x, y, square_type):
      shape_table = [0x000000, QPixmap(":source\Red.png"),
                     QPixmap(":source\Green.png"), QPixmap(":source\Blue.png"),
                     QPixmap(":source\Yellow.png"), QPixmap(":source\Purple.png"),
                     QPixmap(":source\Water_Green.png"), QPixmap(":source\Orange.png")]
      color_table = [(0, 0, 0), (190, 110, 110), (160, 190, 110), (110, 140, 190),
                     (165, 170, 180), (150, 130, 180), (100, 180, 190), (190, 135, 80)]

      # 调用get_square_width方法和get_square_height方法获取方块的长和宽
      square_width, square_height = self.get_square_width(), self.get_square_height()
      painter = QPainter(self)

      # 绘制方块内部
      painter.drawPixmap(x + 1, y + 1, square_width - 2, square_height - 2, shape_table)

      # 绘制方块边框
      color = QColor(*color_table)
      painter.setPen(color.lighter())
      painter.drawLine(x, y, x + square_width - 1, y)
      painter.drawLine(x, y, x, y + square_height - 1)
      painter.setPen(color.darker())
      painter.drawLine(x + square_width - 1, y + 1, x + square_width - 1, y + square_height - 1)
      painter.drawLine(x + 1, y + square_height - 1, x + square_width - 1, y + square_height - 1)其实改动最大的只有一点就是我们把调用fillRect方法改为了调用drawPixmap,fillRect方法绘制一个矩形颜色块,而drawPixmap绘制一个pixmap图形。      shape_table = 首先我们将各种不同形状的俄罗斯方块的图片读取到shape_table中。      painter.drawPixmap(x + 1, y + 1, square_width - 2, square_height - 2, shape_table)然后调用drawPixmap方法以指定的位置和大小将pixmap对象绘制到部件上。11.4.5 初步的成果经过上面的讨论,我们初步写了一些代码,这里面包括自适应背景图的CentralWidget部件的一些代码,以及游戏主面板(GameBoard)和显示下一个块的面板(NextBoard)的基类(Board)的代码:from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QFrame, QLabel
# from PyQt5.QtCore import
from PyQt5.QtGui import QPixmap, QImage, QPainter, QPalette, QBrush, QColor
import tetris_file


class Tetris(QMainWindow):
    def __init__(self):
      super(Tetris, self).__init__()

      self.resize(450, 660)
      self.setCentralWidget(CentralWidget())# 设置Board为中心部件看看效果


class CentralWidget(QWidget):
    def __init__(self):
      super(CentralWidget, self).__init__()

      # 设置背景图案
      self.background = QImage(r":source\ground.png")
      self.setAutoFillBackground(True)

    def resizeEvent(self, event):
      # 重写resizeEvent, 使背景图案可以根据窗口大小改变
      QWidget.resizeEvent(self, event)
      palette = QPalette()
      palette.setBrush(QPalette.Window, QBrush(self.background.scaled(event.size())))
      self.setPalette(palette)


class Board(QFrame):
    def __init__(self, parent=None):
      super(Board, self).__init__(parent)

      # 设置面板边框
      self.setStyleSheet("border: 1px groove gray; border-radius: 5px; ")

    def get_square_width(self):
      return 100

    def get_square_height(self):
      return 100

    def paintEvent(self, event):
      # 重写panitEvent,绘制一个方块在Board上看看效果
      self.draw_square(self.contentsRect().width()/2, self.contentsRect().height()/2, 1)

    def draw_square(self, x, y, square_type):
      shape_table = [0x000000, QPixmap(":source\Red.png"),
                     QPixmap(":source\Green.png"), QPixmap(":source\Blue.png"),
                     QPixmap(":source\Yellow.png"), QPixmap(":source\Purple.png"),
                     QPixmap(":source\Water_Green.png"), QPixmap(":source\Orange.png")]
      color_table = [(0, 0, 0), (190, 110, 110), (160, 190, 110), (110, 140, 190),
                     (165, 170, 180), (150, 130, 180), (100, 180, 190), (190, 135, 80)]

      # 调用get_square_width方法和get_square_height方法获取方块的长和宽
      square_width, square_height = self.get_square_width(), self.get_square_height()
      painter = QPainter(self)

      # 绘制方块内部
      painter.drawPixmap(x + 1, y + 1, square_width - 2, square_height - 2, shape_table)

      # 绘制方块边框
      color = QColor(*color_table)
      painter.setPen(color.lighter())
      painter.drawLine(x, y, x + square_width - 1, y)
      painter.drawLine(x, y, x, y + square_height - 1)
      painter.setPen(color.darker())
      painter.drawLine(x + square_width - 1, y + 1, x + square_width - 1, y + square_height - 1)
      painter.drawLine(x + 1, y + square_height - 1, x + square_width - 1, y + square_height - 1)


class GameBoard(Board):
    pass


class NextBoard(Board):
    pass


class ScoreBoard(QLabel):
    pass

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    tetris = Tetris()
    tetris.show()
    sys.exit(app.exec_())为了看看我们的Board类中draw_square方法的效果,我们将其设为中心部件,并在它的paintEvent方法中调用draw_square方法绘制一个块,大小为100,100。然后可以再将CentralWidget类设为中心部件看看背景图的效果(请自行实现,改一个词而已)http://xxx.fishc.com/album/201506/01/143144txz59nasu5z2zs5v.jpg
截图:绘制方块和背景
有些鱼油喜欢先看效果,我把我用到的图片资源,打包好的tetris_files.py放到一个压缩文件里,需要的鱼油可以自行下载。
链接: http://pan.baidu.com/s/1mgnBsus 密码: rbab

2021.11.20
准备用PySide2重新实现,原因见1#楼最后面更新的说明
请到129#楼,查看后续章节

康小泡 发表于 2015-6-4 00:51:35

楼主好心细

lightninng 发表于 2015-6-4 10:00:13

kklloo 发表于 2015-6-4 00:51
楼主好心细

谢谢夸奖,欢迎多来python版交流~~{:9_228:}

小甲鱼 发表于 2015-6-4 12:42:23



测试回复上传图片。

黑猫白喵 发表于 2015-6-4 16:13:25

正在找QT5教程啊:handshake

网上都是4的

lightninng 发表于 2015-6-4 23:07:41

小甲鱼 发表于 2015-6-4 12:42
测试回复上传图片。

我在这个贴子里回复也不能上传图片,在别的贴子里回复可以上传图片,下面我这个贴子里上点图片按钮的截图
http://xxx.fishc.com/album/201506/04/230524npjzjkv0wr9ook59.jpg

lightninng 发表于 2015-6-4 23:16:51

黑猫白喵 发表于 2015-6-4 16:13
正在找QT5教程啊

网上都是4的

欢迎学习了之后多过来 交流~~{:9_240:}

小甲鱼 发表于 2015-6-5 05:25:25

lightninng 发表于 2015-6-4 23:07
我在这个贴子里回复也不能上传图片,在别的贴子里回复可以上传图片,下面我这个贴子里上点图片按钮的截图 ...

如果是在其他帖子可以正常上传图片,而该帖不行,可能有两个原因,第一是已达到当天最大的上传限制,第二是系统可能有限制每个帖子最大附件尺寸(后台找不到设置的地方)

lightninng 发表于 2015-6-5 07:32:17

小甲鱼 发表于 2015-6-5 05:25
如果是在其他帖子可以正常上传图片,而该帖不行,可能有两个原因,第一是已达到当天最大的上传限制,第二 ...

恩恩,有可能是第二个原因,现在我都把图片放在论坛的相册里了,谢谢帮助~~{:7_113:}
页: 1 2 [3] 4 5 6 7
查看完整版本: PyQt5学习与交流