zoukankan      html  css  js  c++  java
  • PyQt5Day07--QWidget

    1、QWidget描述

      QWidget继承于Object类。

    2、QWidget功能作用

    (1)控件的创建

      ① 框架

      ② 操作

     1 import sys
     2 from PyQt5.Qt import *
     3 
     4 app=QApplication(sys.argv)
     5 
     6 window=QWidget()
     7 window.setWindowTitle("QWidget学习")
     8 window.resize(500,500)
     9 
    10 red=QWidget(window)
    11 red.resize(100,100)
    12 red.setStyleSheet('background-color:red;')
    13 
    14 window.show()
    15 sys.exit(app.exec_())
    View Code

    (2)大小位置

      ① 理论支撑:左上角为坐标原点,向右为X轴正方向,向下为Y轴的正方向

      ② API获取操作:

     1 import sys
     2 from PyQt5.Qt import *
     3 
     4 app=QApplication(sys.argv)
     5 
     6 window=QWidget()
     7 window.setWindowTitle("QWidget学习")
     8 window.move(100,100)
     9 # window.resize(500,500)
    10 window.setFixedSize(500,500) # 设置固定大小
    11 
    12 red=QWidget(window)
    13 red.resize(100,100)
    14 red.setStyleSheet('background-color:red;')
    15 
    16 label=QLabel(window)
    17 label.setText("哈哈哈")
    18 label.move(200,200)
    19 label.setStyleSheet('background-color:cyan')
    20 
    21 # ——————adjustSize()——————开始
    22 def cao():
    23     new_content=label.text()+' 娃哈哈'
    24     label.setText(new_content)
    25 
    26     # label.resize(label.width()+100,label.height())
    27     label.adjustSize() # 自适应框架
    28 
    29 btn=QPushButton(window)
    30 btn.setText('增加内容')
    31 btn.move(200,300)
    32 btn.clicked.connect(cao)
    33 # ——————adjustSize()———————结束
    34 
    35 window.show()
    36 # ——————获取————————开始
    37 print(window.x()) # 相对于父控件的X位置
    38 print(window.y()) # 相对于父控件的Y位置
    39 print(window.pos()) # X Y的组合
    40 print(window.width()) # 控件的宽度
    41 print(window.height()) # 控件的高度
    42 print(window.geometry()) # 用户区域相对于父控件的位置和大小
    43 print(window.rect()) # width height组合
    44 print(window.frameSize()) # 框架大小
    45 print(window.frameGeometry()) # 框架尺寸
    46 # ——————获取————————结束
    47 
    48 # ——————设置————————开始
    49 # window.move(0,100) # 框架移动
    50 # window.resize(800,800) # 框架大小
    51 # window.setGeometry(0,0,500,500) # 用户的相对位置与大小(先显示,再设置)
    52 # ——————设置————————结束
    53 
    54 sys.exit(app.exec_())
    View Code

      ③ 案例:九宫格布局

     1 # *******************位置大小-案例:九宫格布局**********************开始
     2 import sys
     3 from PyQt5.Qt import *
     4 
     5 app=QApplication(sys.argv)
     6 
     7 window=QWidget()
     8 window.setWindowTitle("QWidget大小位置案例")
     9 window.resize(500,500)
    10 window.move(300,300)
    11 
    12 # 总的控件个数
    13 widget_count=9
    14 # 一行多少列
    15 column_count=3
    16 
    17 # 计算一个控件的宽度
    18 widget_width = window.width()/column_count
    19 # 计算一个控件的高度:总共多少行?  编号//一行多少列+1
    20 row_count=(widget_count-1)//column_count+1
    21 widget_height=window.height()/row_count
    22 
    23 for i in range(0,widget_count):
    24     w=QWidget(window)
    25     w.resize(widget_width,widget_height)
    26     widget_x = i % column_count * widget_width
    27     widget_y = i // column_count * widget_height
    28     w.move(widget_x,widget_y)
    29     w.setStyleSheet("background-color:red;border:1px solid yellow")
    30     w.show()
    31 
    32 
    33 window.show()
    34 sys.exit(app.exec_())
    35 # *******************位置大小-案例:九宫格布局**********************结束
    九宫格布局

    (3)最大和最小尺寸

     1 # *******************最大和最小尺寸**********************开始
     2 import sys
     3 from PyQt5.Qt import *
     4 
     5 app=QApplication(sys.argv)
     6 
     7 window=QWidget()
     8 window.setWindowTitle("最大和最小尺寸")
     9 # window.resize(500,500)
    10 window.setMinimumSize(200,200)  # 最小尺寸
    11 window.setMaximumSize(500,500)  # 最大尺寸
    12 # 宽度限定 获取:minimumWidth()   maximumWidth()
    13 #     ——>设置:setMinimumWidth()
    14 # 高度限定 获取:minimumHeight()  maximumHeight()
    15 #     ——>设置:setMinimumHeight()
    16 
    17 window.show()
    18 sys.exit(app.exec_())
    19 # *******************最大和最小尺寸**********************结束
    最大最小尺寸

    (4)内容边距

     1 # *******************内容边距**********************开始
     2 import sys
     3 from PyQt5.Qt import *
     4 
     5 app=QApplication(sys.argv)
     6 
     7 window=QWidget()
     8 window.setWindowTitle("内容边距的设置")
     9 window.resize(500,500)
    10 
    11 label=QLabel(window)
    12 label.setText("哈哈哈")
    13 label.resize(300,300)
    14 label.setStyleSheet("background-color:cyan")
    15 
    16 # 设置内容边距 setContentsMargins() (左 上 右 下)
    17 label.setContentsMargins(100,0,0,0)
    18 # 获取内容边距 getContentsMargins() (左 上 右 下)
    19 print(label.getContentsMargins())
    20 # 获取内容区域 contentsRect()
    21 print(label.contentsRect())
    22 
    23 window.show()
    24 sys.exit(app.exec_())
    25 # *******************内容边距**********************结束
    内容边距

    (5)事件机制

     1 # *******************事件机制**********************开始
     2 from PyQt5.Qt import *
     3 
     4 class Window(QWidget):
     5     def __init__(self):
     6         super().__init__()
     7         self.setWindowTitle("事件机制的学习")
     8         self.resize(500, 500)
     9         self.setup_ui()
    10 
    11     def setup_ui(self):
    12         pass
    13 
    14     # 显示与关闭事件
    15     def showEvent(self,QShowEvent):
    16         print("窗口被展示了出来")
    17 
    18     def closeEvent(self,QCloseEvent):
    19         print("窗口被关闭了")
    20 
    21     # 移动事件
    22     def moveEvent(self,QMoveEvent):
    23         print("窗口移动了")
    24 
    25     # 调整大小事件
    26     def resizeEvent(self,QRiszeEvent):
    27         print("窗口改变了尺寸大小")
    28 
    29     # 鼠标事件
    30     def enterEvent(self,QEvent):
    31         print("鼠标进来了")
    32         self.setStyleSheet("background-color:yellow")
    33     def leaveEvent(self,QEvent):
    34         print("鼠标移开了")
    35         self.setStyleSheet("background-color:green")
    36     def mousePressEvent(self,QMouseEvent):
    37         print("鼠标被按下了")
    38     def mouseReleaseEvent(self,QMouseEvent):
    39         print("鼠标被释放了")
    40     def mouseDoubleClickEvent(self,QMouseEvent):
    41         print("鼠标双击")
    42     def mouseMoveEvent(self,QMouseEvent):
    43         print("鼠标移动了")
    44 
    45     # 键盘事件
    46     def keyPressEvent(self,QKeyEvent):
    47         print("键盘上某一个案件被按下了")
    48     def keyReleaseEvent(self,QKeyEvent):
    49         print("键盘上某一个按键释放了")
    50 
    51     # 焦点事件 focusInEvent()  focusOutEvent()
    52 
    53     # 拖拽事件 dragEnterEvent()  dragLeaveEvent()  dragMoveEvent()
    54     # dropEvent()————拖拽放下时调用
    55 
    56     # 绘制事件 paintEvent()
    57 
    58     # 改变事件 changeEvent()
    59 
    60     # 右键菜单 contextMenuEvent()
    61 
    62     # 输入法 inputMethodEvent()
    63 
    64 if __name__ == '__main__':
    65     import sys
    66 
    67     app=QApplication(sys.argv)
    68 
    69     window=Window()
    70     window.show()
    71     sys.exit(app.exec_())
    72 # *******************事件机制**********************结束
    事件机制

    (6)鼠标相关事件

      ① 操作

     1 # *******************鼠标操作**********************开始
     2 import sys
     3 from PyQt5.Qt import *
     4 
     5 class MyWindow(QWidget):
     6     def mouseMoveEvent(self,me):
     7         print("鼠标移动了",me.globalPos())
     8 
     9 
    10 app = QApplication(sys.argv)
    11 
    12 window = MyWindow()
    13 window.setWindowTitle("鼠标操作")
    14 window.resize(500,500)
    15 
    16 # 改变鼠标的形状
    17 pixmap = QPixmap("xxx.png")
    18 new_pixmap = pixmap.scaled(50,50)
    19 
    20 cursor = QCursor(new_pixmap,50,50) # 设置鼠标的热点
    21 window.setCursor(cursor)
    22 
    23 # 重置鼠标形状
    24 # window.unsetCursor()
    25 
    26 # 设置鼠标的位置
    27 current_cursor = window.cursor()
    28 current_cursor.setPos(0,0)  # 在桌面的左上角
    29 
    30 # 设置鼠标追踪
    31 window.setMouseTracking(True)
    32 
    33 
    34 # 鼠标的设置
    35 # window.setCursor(Qt.BusyCursor)
    36 
    37 # 鼠标在控件内的设置
    38 # label=QLabel(window)
    39 # label.setText("哈哈哈")
    40 # label.resize(100,100)
    41 # label.setStyleSheet('background-color:cyan')
    42 #
    43 # label.setCursor(Qt.ForbiddenCursor)
    44 
    45 window.show()
    46 sys.exit(app.exec_())
    47 # *******************鼠标操作**********************结束
    鼠标操作

      ② 案例

     1 # *******************鼠标操作——案例**********************开始
     2 import sys
     3 from PyQt5.Qt import *
     4 
     5 class Window(QWidget):
     6     def __init__(self):
     7         super().__init__()
     8         self.setWindowTitle("鼠标操作案例")
     9         self.resize(500, 500)
    10         self.move(200, 200)
    11         self.setMouseTracking(True)
    12 
    13         pixmap = QPixmap('xxx.png').scaled(50, 50)
    14         cursor = QCursor(pixmap)
    15         self.setCursor(cursor)
    16 
    17         label = QLabel(self)
    18         self.label = label
    19         label.setText("哈哈哈")
    20         label.move(100, 100)
    21         label.setStyleSheet("background-color:cyan")
    22 
    23     def mouseMoveEvent(self,mv):
    24         print("鼠标移动",mv.localPos())
    25         # label = self.findChild(QLabel)
    26         self.label.move(mv.localPos().x(),mv.localPos().y())
    27 
    28 if __name__ == '__main__':
    29     app = QApplication(sys.argv)
    30 
    31     window = Window()
    32 
    33     window.show()
    34     sys.exit(app.exec_())
    35 # *******************鼠标操作——案例**********************结束
    鼠标操作——案例

    ★【综合案例演示】:结合之前学习的内容,做一个稍微综合一点的。

     1 # *******************事件综合案例**********************开始
     2 import sys
     3 from PyQt5.Qt import *
     4 
     5 # *******************用户框跟随鼠标移动**********************开始
     6 class MyWindow(QWidget):
     7     def __init__(self):
     8         super().__init__()
     9         self.move_flag = False
    10         self.setWindowTitle("事件综合案例")
    11         self.resize(500, 500)
    12 
    13     def mousePressEvent(self,evt):
    14         if evt.button() == Qt.LeftButton: # 判断是否为左键
    15             self.move_flag = True # 设置鼠标追踪的前提条件
    16             # print("鼠标按下")
    17             # 确定两个点  鼠标第一次按下的点,窗口当前所在的原始点
    18             self.mouse_x = evt.globalX()
    19             self.mouse_y = evt.globalY()
    20             print(self.mouse_x,self.mouse_y)
    21 
    22             self.origin_x = self.x()
    23             self.origin_y = self.y()
    24 
    25     def mouseMoveEvent(self,evt):
    26         # print("鼠标移动")
    27         if self.move_flag:
    28             print(evt.globalX(),evt.globalY())
    29             move_x = evt.globalX() - self.mouse_x
    30             move_y = evt.globalY() - self.mouse_y
    31             print(move_x,move_y)
    32             dest_x = self.origin_x + move_x
    33             dest_y = self.origin_y + move_y
    34             self.move(dest_x,dest_y)
    35 
    36     def mouseReleaseEvent(self,evt):
    37         self.move_flag = False # 鼠标释放时关闭窗口的跟随移动
    38         print("鼠标释放")
    39 
    40 # *******************用户框跟随鼠标移动**********************结束
    41 
    42 class MyLabel(QLabel):
    43     def __init__(self,evt):
    44         super().__init__(evt)
    45         self.setText("哈哈哈")
    46         self.resize(200, 200)
    47         self.move(100, 100)
    48         self.setStyleSheet("background-color:cyan")
    49         self.grabKeyboard()
    50 
    51     def enterEvent(self,QEnterEvent):
    52         print("鼠标进入了")
    53         self.setText("欢迎光临")
    54 
    55     def leaveEvent(self,QLeaveEvent):
    56         print("鼠标离开了")
    57         self.setText("谢谢惠顾")
    58 
    59     def keyPressEvent(self,evt):
    60         print("xx")
    61         # if evt.key() == Qt.Key_Tab:
    62         #     print("用户点击了Tab键位")
    63         # 修饰键位 Ctrl 并且 普通键位 s
    64         # if evt.modifiers() == Qt.ControlModifier and evt.key() == Qt.Key_S:
    65         if evt.modifiers() == Qt.ControlModifier | Qt.ShiftModifier and evt.key() == Qt.Key_A:
    66             print(" Ctrl+Shift+A 被点击了")
    67 
    68 app=QApplication(sys.argv)
    69 
    70 window = MyWindow()
    71 label = MyLabel(window)
    72 
    73 window.show()
    74 window.setMouseTracking(True)
    75 sys.exit(app.exec_())
    76 # *******************事件综合案例**********************结束
    综合案例

    (7)父子关系扩充

       ① 框架

      ② 操作

     1 # *******************父子关系扩充**********************开始
     2 import sys
     3 from PyQt5.Qt import *
     4 
     5 app=QApplication(sys.argv)
     6 
     7 window=QWidget()
     8 window.setWindowTitle("父子扩充关系")
     9 window.resize(500,500)
    10 
    11 label1 = QLabel(window)
    12 label1.setText("标签1")
    13 
    14 label2 = QLabel(window)
    15 label2.setText("标签2")
    16 label2.move(50,50)
    17 
    18 label3 = QLabel(window)
    19 label3.setText("标签3")
    20 label3.move(100,100)
    21 
    22 # 查看某点处是否有子控件 childAt(x,y)
    23 print(window.childAt(55,55)) # <PyQt5.QtWidgets.QLabel object at 0x0000020F303403A8>
    24 print(window.childAt(250,250)) # None
    25 
    26 # 获取指定控件的父控件 parentWidget()
    27 print(label2.parentWidget()) # <PyQt5.QtWidgets.QWidget object at 0x0000019048F4AC18>
    28 
    29 # 查看所有子控件组成的边界矩形
    30 print(window.childrenRect()) # PyQt5.QtCore.QRect(0, 0, 200, 130)
    31 
    32 
    33 window.show()
    34 sys.exit(app.exec_())
    35 # *******************父子关系扩充**********************结束
    父子关系扩充

      ③ 案例

     1 # *******************父子关系--案例**********************开始
     2 import sys
     3 from PyQt5.Qt import *
     4 
     5 # class Label(QLabel):
     6 #     def mousePressEvent(self,QMouseEvent):
     7 #         self.setStyleSheet('background-color:red')
     8 
     9 class Window(QWidget):
    10     def mousePressEvent(self,evt):
    11         local_x = evt.x()
    12         local_y = evt.y()
    13         print(local_x,local_y)
    14         sub_widget = self.childAt(local_x,local_y)
    15         if sub_widget is not None:
    16             sub_widget.setStyleSheet('background-color:red')
    17 
    18 app=QApplication(sys.argv)
    19 
    20 # window=QWidget()
    21 window=Window()
    22 window.setWindowTitle("父子关系案例")
    23 window.resize(500,500)
    24 
    25 for  i in range(1,11):
    26     # label = Label(window)
    27     label = QLabel(window)
    28     label.setText("标签"+ str(i))
    29     label.move(40*i,40*i)
    30 
    31 
    32 window.show()
    33 sys.exit(app.exec_())
    34 # *******************父子关系--案例**********************结束
    父子关系-案例

    (8)层级关系

      ① 框架

      ② 操作

     1 # *******************层级关系**********************开始
     2 import sys
     3 from PyQt5.Qt import *
     4 
     5 class Label(QLabel):
     6     def mousePressEvent(self,QMouseEvent):
     7         self.raise_()
     8 
     9 app=QApplication(sys.argv)
    10 
    11 window=QWidget()
    12 window.setWindowTitle("层级关系")
    13 window.resize(500,500)
    14 
    15 label1 = Label(window)
    16 label1.setText("标签1")
    17 label1.resize(200,200)
    18 label1.setStyleSheet("background-color:red")
    19 
    20 label2 = Label(window)
    21 label2.setText("标签2")
    22 label2.resize(200,200)
    23 label2.setStyleSheet("background-color:green")
    24 
    25 label2.move(100,100)
    26 # label2.lower() # 标签2放在下面
    27 # label1.raise_()  # 标签1放在上面
    28 # label2.stackUnder(label1)  # 让标签2在标签1下面
    29 
    30 window.show()
    31 sys.exit(app.exec_())
    32 # *******************层级关系**********************结束
    层级关系操作

    (9)顶层窗口特定操作

      ① 框架

      ② 操作(图标、标题、不透明度、窗口状态和最大最小化)

     1 # *******************顶层窗口特定操作**********************开始
     2 import sys
     3 from PyQt5.Qt import *
     4 
     5 app=QApplication(sys.argv)
     6 
     7 window=QWidget()
     8 window.resize(500,500)
     9 window.setWindowTitle("w1")
    10 
    11 # # 设置程序图标
    12 # icon = QIcon("D:/wendang/PyCharmCode/PythonGUI/PyQt5/xxx.png")
    13 # window.setWindowIcon(icon)
    14 # # 获取
    15 # print(window.windowIcon())
    16 #
    17 # # 设置程序标题
    18 # window.setWindowTitle("顶层窗口操作")
    19 # # 获取
    20 # print(window.windowTitle())
    21 #
    22 # # 不透明度设置
    23 # window.setWindowOpacity(0.9) # 0.0~1.0  值越大,越不透明
    24 # # 获取
    25 # print(window.windowOpacity()) # 0.8980392156862745
    26 
    27 # *********窗口状态***********begin
    28 # 设置窗口状态默认最小化
    29 # window.setWindowState(Qt.WindowMinimized)
    30 
    31 # 设置窗口状态默认最最大化
    32 # window.setWindowState(Qt.WindowMaximized)
    33 
    34 # 活动窗口
    35 # w2 = QWidget()
    36 # w2.setWindowTitle("w2")
    37 # *********窗口状态***********over
    38 
    39 window.show()
    40 # w2.show()
    41 # window.setWindowState(Qt.WindowActive) # 活动窗口
    42 # 窗口最大最小显示
    43 # window.showMximized()  window.showMinimized()
    44 
    45 sys.exit(app.exec_())
    46 # *******************顶层窗口特定操作**********************结束
    图标、标题、不透明度度和窗口状态

      ③ 顶层窗口操作--窗口标识

         

      ④ 案例:无标题栏、添加最大最小关闭三个按钮、支持拖拽用户移动

      1 # *******************顶层窗口操作-案例**********************开始
      2 import sys
      3 from PyQt5.Qt import *
      4 
      5 class Window(QWidget):
      6     def __init__(self,*args,**kwargs):
      7         super().__init__(*args,**kwargs)
      8         self.setWindowOpacity(1)  # 设置透明度
      9         self.setWindowTitle("顶层窗口操作--案例")
     10         self.resize(500, 500)
     11 
     12         # 公共数据
     13         self.top_margin = 0
     14         self.btn_w = 80
     15         self.btn_h = 40
     16         self.move_flag = False
     17 
     18         self.setup_ui()
     19 
     20     def setup_ui(self):
     21 
     22         # 添加三个子控件按钮(右上角)
     23         close_btn = QPushButton(self)
     24         self.close_btn = close_btn
     25         close_btn.setText("关闭")
     26         close_btn.resize(self.btn_w, self.btn_h)
     27         close_btn.setStyleSheet("background-color:white")
     28 
     29         # 最大化按钮
     30         max_btn = QPushButton(self)
     31         self.max_btn = max_btn
     32         max_btn.setText("最大化")
     33         max_btn.resize(self.btn_w, self.btn_h)
     34         max_btn.setStyleSheet("background-color:white")
     35 
     36         # 最小化按钮
     37         min_btn = QPushButton(self)
     38         self.min_btn = min_btn
     39         min_btn.setText("最小化")
     40         min_btn.resize(self.btn_w, self.btn_h)
     41         min_btn.setStyleSheet("background-color:white")
     42 
     43         # 监听按钮
     44         self.close_btn.pressed.connect(self.close)
     45 
     46         def max_normal():
     47             if self.isMaximized():
     48                 self.showNormal()
     49                 max_btn.setText("最大化")
     50             else:
     51                 self.showMaximized()
     52                 max_btn.setText("恢复")
     53 
     54         max_btn.pressed.connect(max_normal)
     55         min_btn.pressed.connect(self.showMinimized)
     56 
     57     def resizeEvent(self,QResizeEvent):
     58         print("窗口大小发生了改变")
     59 
     60         window_w = self.width()
     61         close_btn_x = window_w - self.btn_w
     62         close_btn_y = self.top_margin
     63         self.close_btn.move(close_btn_x, close_btn_y)
     64 
     65         max_btn_x = close_btn_x - self.btn_w
     66         max_btn_y = self.top_margin
     67         self.max_btn.move(max_btn_x, max_btn_y)
     68 
     69         min_btn_x = max_btn_x - self.btn_w
     70         min_btn_y = self.top_margin
     71         self.min_btn.move(min_btn_x, min_btn_y)
     72 
     73     def mousePressEvent(self, evt):
     74         if evt.button() == Qt.LeftButton:
     75             self.move_flag = True
     76             print("鼠标点击了")
     77             self.mouse_x = evt.globalX()
     78             self.mouse_y = evt.globalY()
     79             # print(self.mouse_x,self.mouse_y)
     80             self.origin_x = self.x()
     81             self.origin_y = self.y()
     82             # print(self.origin_x,self.origin_y)
     83 
     84     def mouseMoveEvent(self,evt):
     85         if self.move_flag:
     86             print("鼠标移动了")
     87             move_x = evt.globalX() - self.mouse_x
     88             move_y = evt.globalY() - self.mouse_y
     89             dest_x = self.origin_x + move_x
     90             dest_y = self.origin_y + move_y
     91             # print(move_x,move_y)
     92             self.move(dest_x,dest_y)
     93 
     94     def mouseReleaseEvent(self, QMouseEvent):
     95         print("鼠标释放了")
     96         self.move_flag = False
     97 
     98 
     99 app=QApplication(sys.argv)
    100 
    101 window=Window(flags=Qt.FramelessWindowHint) # 去除标题栏
    102 # window.setWindowFlags(Qt.FramelessWindowHint) # 去除标题栏另一种方法
    103 window.setMouseTracking(True)
    104 
    105 window.show()
    106 sys.exit(app.exec_())
    107 # *******************顶层窗口操作-案例**********************结束
    顶层窗口综合案例

    (10)交互状态

       ① 框架

      ② 操作:是否可用,是否隐藏/显示

    1 btn.setEnabled(False) # 设置控件禁用
    2 print(btn.isEnabled())  # 查看控件是否禁用
    3 btn.setVisible(False) # 隐藏按钮
    4 window.setVisible(True) # 是否显示
    5 
    6 ① 如果只有btn.setVisible()  而没有父控件的show() 那么btn不会绘制。遵循先绘制父控件,再绘制子控件
    7 ② isHidden()是相对于父控件而言,父控件隐藏了,而子控件没有隐藏,那么 子控件.isHidden() 则为False,但是 子控件.isVisible() 则为True;
    8 ③ A.isVisible(B) 父控件B显示的时候,子控件A是否跟着被显示

      操作:是否编辑:[*] 文本编辑后显示,在word中有。退出程序后判断编辑状态,是否保存等等操作

     1 # *******************是否编辑**********************开始
     2 import sys
     3 from PyQt5.Qt import *
     4 
     5 app=QApplication(sys.argv)
     6 
     7 window=QWidget()
     8 window.setWindowTitle("交互状态-是否编辑[*]") # [*]可放在前中后,只能放*
     9 window.resize(500,500)
    10 window.setWindowModified(True) # 设置被编辑状态,显示*
    11 print(window.isWindowModified()) # 查看是否为编辑状态
    12 
    13 window.show()
    14 sys.exit(app.exec_())
    15 # *******************是否编辑**********************结束

      操作:是否为活跃窗口

     1 # *********是否为活跃窗口***********begin
     2 import sys
     3 from PyQt5.Qt import *
     4 
     5 app=QApplication(sys.argv)
     6 
     7 window=QWidget()
     8 window.setWindowTitle("交互状态-是否为活跃窗口")
     9 window.resize(500,500)
    10 
    11 w2 = QWidget()
    12 w2.show()
    13 
    14 window.show()
    15 # 不是谁在前面就是活跃窗口,有光圈的才是活跃窗口
    16 print(w2.isActiveWindow())  # 查看窗口2是否为活跃窗口
    17 
    18 sys.exit(app.exec_())
    19 # *********是否为活跃窗口***********over

      操作:关闭close, 比如btn.close() 相当于隐藏,而增加一个设置就会释放:

     1 # *********关闭***********begin
     2 import sys
     3 from PyQt5.Qt import *
     4 
     5 app=QApplication(sys.argv)
     6 
     7 window=QWidget()
     8 window.setWindowTitle("关闭")
     9 window.resize(500,500)
    10 
    11 btn = QPushButton(window)
    12 btn.setText("按钮")
    13 btn.destroyed.connect(lambda :print("按钮被释放了"))
    14 btn.setAttribute(Qt.WA_DeleteOnClose,True)
    15 btn.close()
    16 
    17 window.show()
    18 sys.exit(app.exec_())
    19 # *********关闭***********over

      ③ 案例:默认状态下,标签隐藏,文本框和按钮显示,按钮设置为不可用状态;当文本框有内容的时候,让按钮可用,否则不可用;当文本框内容为XB时,点击按钮则显示标签,并展示文本为登录成功,否则为失败。

     1 # *********案例***********begin
     2 from PyQt5.Qt import *
     3 
     4 class Window(QWidget):
     5     def __init__(self):
     6         super().__init__()
     7         self.setWindowTitle("交互状态案例")
     8         self.resize(500, 500)
     9         self.setup_ui()
    10 
    11     def setup_ui(self):
    12         # 添加三个子控件
    13         label = QLabel(self)
    14         label.setText("标签")
    15         label.move(100,50)
    16         label.hide() # 标签隐藏
    17 
    18         le = QLineEdit(self)
    19         le.setText("文本框")
    20         le.move(100,100)
    21 
    22         btn = QPushButton(self)
    23         btn.setText("登录")
    24         btn.move(100,150)
    25         btn.setEnabled(False)
    26 
    27         def text_cao(text):
    28             print("文本内容发生了改变",text)
    29             # if len(text) > 0:
    30             #     btn.setEnabled(True)
    31             # else:
    32             #     btn.setEnabled(False)
    33             btn.setEnabled(len(text) >0)
    34 
    35         le.textChanged.connect(text_cao)
    36 
    37         def check():
    38             # print("按钮被点击了")
    39             # 1、获取文本框内容
    40             content = le.text()
    41             # 2、判断是否是XB
    42             if content == 'XB':
    43             # 3、是:显示之前隐藏的标签,展示文本
    44                 label.setText("登录成功")
    45             else:
    46                 label.setText("登录失败")
    47             label.show()
    48             label.adjustSize()
    49 
    50         btn.pressed.connect(check)
    51 
    52 
    53 
    54 
    55 if __name__ == '__main__':
    56     import sys
    57 
    58     app=QApplication(sys.argv)
    59 
    60     window=Window()
    61     window.show()
    62     sys.exit(app.exec_())
    63 # *********案例***********over
    64 # *******************交互状态**********************结束
    综合案例

    (11)信息提示

      ① 框架

      ② 操作:statusTip() , setStatusTip(str), toolTip() , setToolTip(str) , whatsThis() , setWhatsThis()

     1 # *******************信息提示**********************开始
     2 import sys
     3 from PyQt5.Qt import *
     4 
     5 app=QApplication(sys.argv)
     6 
     7 # window=QWidget()
     8 window = QMainWindow() # 懒加载:用到的时候才会创建
     9 window.statusBar()
    10 window.setWindowTitle("信息提示")  # 状态提示
    11 window.resize(500,500)
    12 window.setWindowFlags(Qt.WindowContextHelpButtonHint)
    13 
    14 # 当鼠标停留在窗口控件身上时,在状态栏提示的一段文字
    15 window.setStatusTip("这是窗口")
    16 
    17 label = QLabel(window)
    18 label.setText("标签")
    19 label.setStatusTip("这是标签")  # 状态提示
    20 label.setToolTip("这是一个提示标签")  # 显示在鼠标的右下侧
    21 label.setToolTipDuration(2000) # 设置标签提示显示时长
    22 
    23 label.setWhatsThis("这是啥?这是标签")
    24 
    25 window.show()
    26 sys.exit(app.exec_())
    27 # *******************信息提示**********************结束
    操作

    (12)焦点控制

      ① 框架

      ② 操作:单个控件角度与父控件角度

     1 # *******************焦点控制**********************开始
     2 import sys
     3 from PyQt5.Qt import *
     4 
     5 # *********父控件角度***********begin
     6 class Window(QWidget):
     7     def mousePressEvent(self,QMouseEvent):
     8         # print(self.focusWidget())
     9         # self.focusNextChild()  # 聚焦到下一个控件
    10         # self.focusPreviousChild() # 聚焦上一个控件
    11         self.focusNextPrevChild(True) # True是聚焦到下一个,False是聚焦到上一个
    12 # *********父控件角度***********end
    13 
    14 
    15 app=QApplication(sys.argv)
    16 
    17 window=Window()
    18 window.setWindowTitle("焦点控制")
    19 window.resize(500,500)
    20 
    21 le1 = QLineEdit(window)
    22 le1.move(50,50)
    23 
    24 le2 = QLineEdit(window)
    25 le2.move(100,100)
    26 
    27 le3 = QLineEdit(window)
    28 le3.move(150,150)
    29 
    30 # *********单个控件角度***********begin
    31 # le2.setFocus()  # 让文本框2已进入就获取焦点
    32 # le2.setFocusPolicy(Qt.TabFocus) # 本文框2只有通过tab切换获得焦点
    33 # le2.setFocusPolicy(Qt.ClickFocus) # 本文框2只有通过鼠标单击获得焦点
    34 
    35 # le2.setFocus()
    36 # le2.clearFocus() # 取消焦点
    37 # *********单个控件角度***********end
    38 
    39 # *********父控件角度***********begin
    40 # 获取当前窗口内部,所有子控件获取焦点的那个控件
    41 # print(window.focusWidget())
    42 QWidget.setTabOrder(le1,le3) # 设置子控件获取焦点的先后顺序
    43 # *********父控件角度***********end
    44 
    45 window.show()
    46 sys.exit(app.exec_())
    47 # *******************焦点控制**********************结束
    操作

    时间:2020-03-17      17:00:07

    作者(QQ):931935931

  • 相关阅读:
    PAIP.paip.手机离线ROOT过程总结
    paip.程序设计扫号器跑号器结果分类设计
    PAIP.测试硬盘的成色以及速率
    paip.httpd.conf 是空的.txt
    paip.c#.nett 系统托盘动态图标闪烁图标
    paip.验证码识别反馈法提高识别率
    paip.提升用户体验找回密码的设
    paip.sql2008 客户端软件绿色版V319
    提升用户体验自动邮编提示与验证地址
    PAIP.提升性能---LISTBOX加载30万大数据量终结方案
  • 原文地址:https://www.cnblogs.com/fengxb1213/p/12439507.html
Copyright © 2011-2022 走看看