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

原文地址:https://www.cnblogs.com/fengxb1213/p/12439507.html