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_())
(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_())
③ 案例:九宫格布局
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