pyside2 QT学习

Qtwidgets控件功能

QApplication 提供了整个图形界面程序的底层管理功能

        QApplication要做如此重要的初始化操作,所以,我们必须在任何界面控件对象创建前,先创建它。

QApplication应用, QMainWindow主窗口, QPushButton按钮,  QPlainTextEdit纯文本编辑框

控件对象的 resize 方法决定了这个控件显示的大小。

app.exec_()是一个死循环,等待用户操作。

结合图形界面:

 pyside2 QT学习_第1张图片

可以用这个完成初始界面和函数的连接

只是界面上的按钮被响应了,不是键盘。 

pyside2 QT学习_第2张图片

我的python怎么不识字?

封装!

        创建的行为全部定义在类里面封装

        确保主窗口的show的调用

pyside2 QT学习_第3张图片

也会继承界面设计时的属性

可以把UI文件直接转化为包含界面定义的Python代码文件

pyside2-uic main.ui > ui_main.py 

主要模块:

Qt Widgets 为应用程序提供随时可用的 Widget,包括 UI 图形元素。

Qt Gui 扩展 QtCore 采用 GUI 功能:事件、窗口和屏幕、基于 OpenGL 和光栅的 2D 描绘及图像。

Qt Core 提供核心非 GUI 功能,像:信号和槽、特性、项模型基类、序列化等。

Qt Widgets :

QApplication:pyside2 QT学习_第4张图片

 Qwidget:Widget 是用户界面原子:它从窗口系统接收鼠标、键盘及其它事件,并在屏幕上描绘自身表示。每个 Widget 为矩形,且按 Z 次序排序。Widget 被父级及其前面的小部件裁剪。

未嵌入父级小部件的 Widget 称为窗口。

是一个窗口或部件,有父窗口就是部件,没有就是窗口

通常,窗口拥有框架和标题栏,尽管还可以创建不带这种装饰的窗口使用适合 window flags )。在 Qt 中, QMainWindow 和各种子类化 QDialog 是最常见的窗口类型。

        其中有grabKeyboard

  1. Qt::WindowFlags f = { } (若可用的话) 设置窗口标志;默认适于几乎所有小部件,但要获得如没有窗口系统框架的窗口,就必须使用特殊标志。self.setWindowFlag(Qt.FramelessWindowHint)  

  2. QWidget has a font property, but never uses this itself. There are many subclasses which provide real functionality,

    1. setPalette的参数是QPalette        self.setPalette()是为了设置窗口颜色,就是这个widget的颜色,就是这个小矩形的颜色

    2. setcolor()是什么?是QPalette的函数

    3. QPalette()返回值的什么? palette = QPalette()是表示创建一个类的实例,以至于可以使用setcolor   Constructs a palette object that uses the application’s default palette.

    4. QPalette()是Qt Gui里面的

    5. palette.setColor(QPalette.Background, colorDict[colorId])#要用window,qt里background已经被弃用  (返回当前颜色组的窗口(一般背景)画笔。  屁!明明就还是得用Background 哦没事了,要用大写的W,所以是Window

    6. snakenode就是用widget这个小组件,一个矩形块,不作为窗口,没有标题栏,作为蛇身,所以colorid第一个是灰色的,可以变颜色

      1. lable1.setAutoFillBackground(True)这个属性需要和调色板结合起来才能使用。pyside2 QT学习_第5张图片

        pyside2 QT学习_第6张图片

        这两个是一样的... https://blog.csdn.net/jeekmary/article/details/79156597

  3. PySide2.QtWidgets.QWidget. grabKeyboard ( ) ¶ 要让这个小组件接收到所有的键盘事件直到releaseKeyboard(); other widgets get no keyboard events at all. If a different widget is currently grabbing keyboard input, that widget’s grab is released first.(这是为什么双人模式用不了

  4. setWindowFlags(Qt::FramelessWindowHint);直接隐藏掉。。。

    1. PySide2.QtWidgets.QWidget. setWindowFlags 

    2. 设置窗口属性

  5. 双人模式运行不了是不是因为没有调用基类实现pyside2 QT学习_第7张图片

     积累实现是什么... 只是一个类,就是键盘的输入

  6. pyside2 QT学习_第8张图片PySide2.QtCore.Qt. Keypyside2 QT学习_第9张图片

  7. posTop用来表示顶部的位置就是positionTop  
    random.randrange ([start,] stop [,step])

    posTop = randrange(50, screen_height-50, 50) 

  8. QTimer class provides a high-level programming interface for timers. To use it, create a QTimer , connect its timeout() signal to the appropriate slots, and call start() . From then on, it will emit the timeout() signal at constant intervals. 意思就是:QTimer要先创建一个实例,比如timer=QTimer(),然后将timeout()的信息连接到想要的slot然后调用start()         timer = QTimer()  timer.timeout.connect(update) 然后update里面又有timer.start(snake_speed)   然后从那时候起,timeout就会按恒定的时间间隔发出信号
  9. 单独调用snakenode不会动,头才接受键盘对于方向的控制
  10. 用布尔值设置了fakefood 其实是初始化 用None
  11. 用了destroy函数....好像是tkinter的   没办法了,去掉会运行不了,所以必须得留下...   Tkinter 是 Python 自带的标准库,因此无须另行安装,它支持跨平台运行,不仅可以在 Windows 平台上运行,还支持在 Linux 和 Mac 平台上运行。destroy()是一种通用的窗口小部件方法,即我们可以将此方法与任何可用的窗口小部件以及主tkinter窗口一起使用。

    这个是想实现什么呢?  可能是每次生成假食物之前,要先让它消失

    1. 小部件被销毁,只有根窗口留下
  12. pyside2 QT学习_第10张图片s是不是每次用到posTop都会调用一次randrange生成一个位置,不然就不会判等了??不对啊,如果能够判等的话,另外一个值应该是确定的呀...应该只是赋一个值罢了...
    1.        

    2. pyside2 QT学习_第11张图片 算了...搞不懂就再加一次调用randrange了 
  13. 外部变量初始化方法用None 并且用global(终于搞懂了为什么要用global了而不是直接初始化

  14. snake是一个元组把...snake[0]就是它的头,就是第一个widget 

  15. isDead函数如果前面的if都不执行,就直接return False 不需要else吗???

  16. pyside2 QT学习_第12张图片

    node就是snakenode一个类型的实例,首先是蛇头,因为初始的时候last_direct是None,所以先把蛇头的方向赋给 last_direct,所以本质上对蛇头没有什么改变。当第一个身体快的时候,它的方向赋给了last_direct,蛇头的方向通过last_direct赋给了它,本质上就是他们交换了方向,导致最后的结果是每次的节点的方向都变成了上一个的方向。

    1. 为什么是node先走一步呢??? 我懂了,比如转弯的时候,如果不先走一步,就会出现本来水平右移的蛇,当蛇头往下,本来就往下,蛇身本来向右,就会变成向下,然后就变成平行下移了

  17. pyside2 QT学习_第13张图片

    用sys.exit(app.exec_())退出更好,

  18. 吃到食物的时候用food.destroy()去销毁,吃掉后需要更新食物     每次更新食物要把之前的fakefood的小组件用destroy()销毁,然后创建新的fakefood

  19. 为什么要初始化food 和 fakefood呢?  oo food可以不用初始化,因为没有地方需要判定它

  20. static PySide2.QtWidgets.QApplication. desktop ( )

    1. 返回桌面 Widget (也称根窗口)。

    2. The f means Formatted string literals and it's new in Python 3.6

    3. The parts of the string outside curly braces are treated literally, 

    4. 我懂了...所以根本没有设置桌面...只是在用几个widgets在运行...

    5. desktop出现的唯一目的就是为了测量height和width

          .

你可能感兴趣的:(PySide2,pyqt)