当前位置:
首页 > Python基础教程 >
-
PYQT5 系列(一)——参考自《弗兰克万岁》(3)
self.width = 24 self.height = 42 self.edit.resize(self.width, self.height) self.document = self.edit.document() self.document.contentsChanged.connect(self.textAreaChanged) self.edit.setLineWrapMode(QTextEdit.NoWrap)
def textAreaChanged(self): self.document.adjustSize() newWidth = self.document.size().width() + 10 newHeight = self.document.size().height() + 20 if newWidth != self.edit.width(): self.edit.setFixedWidth(newWidth) if newHeight != self.edit.height(): self.edit.setFixedHeight(newHeight)
PYQT5(12)可复用的自动保存窗口位置的frame
import json import os from PyQt5.QtWidgets import QMainWindow class AutoSaveWindow(QMainWindow): def __init__(self,name=''): #注意初始化的时候要带上name参数 super().__init__() self.name=name if os.path.exists('window_location_%s.txt'%self.name): self.load_location() #每次启动都检查位置并移动 def closeEvent(self, *args, **kwargs): self.save_location() def save_location(self): with open('window_location_%s.txt'%self.name, 'w') as f: data = {'x': self.x(), 'y': self.y()} f.write(json.dumps(data)) def load_location(self): with open('window_location_%s.txt'%self.name, 'r') as f: txt = f.read() print(txt) j = json.loads(txt) self.move(j['x'],j['y'])
PYQT5(13)重复绑定按钮事件需要做的一件事情
btn.disconnect()
PYQT5(14)pyqt5 QTreeWidget使用集锦(如右键菜单)
比较好的教程:https://zhuanlan.zhihu.com/p/36033317
【简介】
PyQT5中 QTreeWidget 例子
from PyQt5.QtWidgets import * import sys class TreeWidgetDemo(QMainWindow): def **init**(self, parent=None): super(TreeWidgetDemo, self).**init**(parent) self.setWindowTitle('TreeWidget 例子') self.tree = QTreeWidget() # 设置列数 self.tree.setColumnCount(2) # 设置头的标题 self.tree.setHeaderLabels(['Key', 'Value']) # 设置自适应宽度 self.header().setSectionResizeMode(QHeaderView.ResizeToContents) root = QTreeWidgetItem(self.tree) root.setText(0, 'root') root.setText(1, '0') child1 = QTreeWidgetItem(root) child1.setText(0, 'child1') child1.setText(1, '1') child2 = QTreeWidgetItem(root) child2.setText(0, 'child2') child2.setText(1, '2') child3 = QTreeWidgetItem(root) child3.setText(0, 'child3') child3.setText(1, '3') child4 = QTreeWidgetItem(child3) child4.setText(0, 'child4') child4.setText(1, '4') child5 = QTreeWidgetItem(child3) child5.setText(0, 'child5') child5.setText(1, '5') self.tree.addTopLevelItem(root) self.tree.clicked.connect(self.onTreeClicked) self.setCentralWidget(self.tree) def onTreeClicked(self, qmodelindex): item = self.tree.currentItem() print("key=%s ,value=%s" % (item.text(0), item.text(1)))
启动一下试试
if **name** == '**main**': app = QApplication(sys.argv) tree = TreeWidgetDemo() tree.show() sys.exit(app.exec_())
分析判断是否是父项
def onTreeClicked(self, qmodelindex): item = self.tree.currentItem() if item.parent()==None: print("key=%s ,value=%s" % (item.text(0), item.text(1))) #None表示是最高一级
信号触发条件:
activated(QModelIndex) 当用户激活index指定的项目时,发出此信号 clicked(QModelIndex) 左键单击鼠标按钮时,发出此信号 collapsed(QModelIndex) 当索引指定的项目折叠时,发出信号。 currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)当前项目更改时,发出信号 doubleClicked(QModelIndex) 双击鼠标按钮时,发出此信号 entered(QModelIndex) 当鼠标光标进入index指定的项目时,发出此信号 expanded(QModeldelIndex) 当索引指定的项目展开时,发出信号 iconSizeChanged(QSize) 在视图可见时设置此图标大小时,发出此信号 itemActivated(QTreeWidgetItem*,int) 当用户通过单击,双击或按特殊键(例如,Enter)激活项目时,发出信号 itemChanged(QTreeWidgetItem*,int) 当指定项目中列的内容发生更改时,发出信号 itemClicked(QTreeWidgetItem*,int) 当用户在窗口内单击时,发出信号。 itemCollapsed(QTreeWidgetItem*) 折叠指定项目时,发出信号 itemDoubleClicked(QTreeWidgetItem*,int) 当用户在窗口内双击时,发出信号 itemEntered(QTreeWidgetItem*,int) 当鼠标光标进入指定列上的项目时,发出信号 itemExpanded(QTreeWidgetItem*) 扩展指定项目时,发出信号 itemPressed(QTreeWidgetItem*,int) 当用户在窗口内按下鼠标按钮时,发出信号。 itemSelectionChange() 当树构件中的选择发生变化时,发出信号 pressed(QModelIndex) 按下鼠标按钮时,发出信号 viewportEntered() 当鼠标光标进入控件时,发出信号
获取父项某一个column的内容和
def getLocation(self,item): if item.parent(): temp = item.parent().text(0) parent=self.getLocation(item.parent()) if parent : res=os.path.join(parent,temp) return res else: return temp else: return 0 #举例,text(0)是文件夹的名称,那么递归后就可以获取全部路径
右键菜单
def __init__(self): self.setContextMenuPolicy(Qt.CustomContextMenu)#打开右键菜单的策略 self.customContextMenuRequested.connect(self.rightClickMenu)#绑定事件 def rightClickMenu(self,pos): try: self.contextMenu = QMenu()#创建对象 self.actionA = self.contextMenu.addAction(u'动作')#添加动作 self.actionA = self.contextMenu.addAction(u'动作b') self.actionA.triggered.connect(self.actionHandler) self.contextMenu.exec_(self.mapToGlobal(pos))#随指针的位置显示菜单 self.contextMenu.show()#显示 except Exception as e: print(e) def actionHandler(self): print(self.currentItem().text(0))
删除子节点下的所有item
item=self.currentItem() for i in range(0,item.childCount()): print(item.child(item.childCount()-1).text(0)) item.removeChild(item.child(item.childCount()-1))