【PyQt】记录各种组件的使用方法
使用Python开发GUI界面工具,通常可用选择PyQt框架,非常易使用,而且网上也有很多相关的文档分享。我也是在写了多个GUI界面后,自己整理了一些常用的使用文档,在此分享给大家(PyQt4~PyQt5适用)。
样式表
官网连接https://doc.qt.io/qt-5/stylesheet-examples.html,通过QSS样式可用将界面进行美化,幸好官网提供了比较详细的说明,可用去官网查看。
/** #evilButton 这个evilButton来自setObjectName 语法和css类似 */ QPushButton#evilButton { background-color: red; border-style: outset; border-width: 2px; border-color: beige; }
FindWidget 找widget
有时候我们创建了很多的组件,但是不会每个组件都保持下来,可用通过查找的方式得到。
widget = Container # 某个父容器widget.findChild(QLabel, "xx") # 找他里面的objectName为xx的QLabel。 # 遍历找 for child in widget.children(): if isinstance(child, QLabel) # 按类型 if child.objectName() == "xx" # 按objectName
QTreeWidget 树形控件
nav = QTreeWidget() for name in some_list: item = QTreeWidgetItem(nav) if name is list: # 如果还有子节点 for child in name: c_node = QTreeWidgetItem(item) # 通过QTreeWidgetItem创建子节点,子节点的子节点继续使用QTreeWidgetItem,parent为父节点。 # 设置节点的icon icon = QIcon() item.setIcon(icon)
QListWidget 列表控件
listw = QListWidget() # 生成列表,待自定义的widget item = QListWidgetItem() item_content_widget = QWidget() #-->创建Qwidget并在里面填充所需的内容,例如加label,加checkbox等 item.setSizeHint(item_content_widget.sizeHint()) # 一定要调用这个设置列表每列的尺寸,否则显示异常。尺寸安装内部容器的尺寸 listw.addItem(item) # 添加到列表控件中 listw.setItemWidget(item, item_content_widget)# 把列组件和自定义的关联起来。 # 读取内容 for i in range(listw.count()): # 仅展示一种 item = listw.item(i) # 这样就拿到了item 如果关联了自定义widget item_content_widget = listw.itemWidget(item) # 这样才可以拿到
QsciScintilla 代码编辑器需要额外安装Qsci库
class ScriptViewer(QsciScintilla): """""" def __init__(self, basename, parent=None): """""" QsciScintilla.__init__(self, parent) # 以\n换行 self.setEolMode(self.SC_EOL_LF) # 自动换行。self.WrapWord是父类QsciScintilla的 self.setWrapMode(self.WrapWord) # 自动补全。对于所有Ascii字符 self.setAutoCompletionSource(self.AcsAll) # 自动补全大小写敏感 self.setAutoCompletionCaseSensitivity(False) # 输入多少个字符才弹出补全提示 self.setAutoCompletionThreshold(1) # 代码可折叠 self.setFolding(True) # 设置默认字体 self.setFont(QFont('Courier New', 12)) # 0~4。第0个左边栏显示行号 self.setMarginType(0, self.NumberMargin) # 设置空白 # self.setMarginLineNumbers(0, True) # 边栏背景颜色 self.setMarginsBackgroundColor(QColor(120, 220, 180)) # 边栏宽度 self.setMarginWidth(0, 30) # 换行后自动缩进 self.setAutoIndent(True) # tab宽度是4 self.setTabWidth(4) # 支持中文字符 self.setUtf8(True) # 显示空格点和\t的箭头 self.setWhitespaceVisibility(True) # 设置空格的宽度 self.setWhitespaceSize(2) # 设置用空格代替tab self.setIndentationsUseTabs(False) def setPythonScriptLexer(self): """Python脚本语法高亮""" self.mTextLexer = QsciLexerPython() self.setLexer(self.mTextLexer) def setTextLexer(self): """""" self.mTextLexer = QsciLexerTeX() self.setLexer(self.mTextLexer) def setCssLexer(self): """CSS样式高亮""" self.mTextLexer = QsciLexerCSS() self.setLexer(self.mTextLexer) def setConfigLexer(self): """properties文件样式高亮""" self.mTextLexer = QsciLexerProperties() self.setLexer(self.mTextLexer)
QTabWidget Tab组件
tab = QTabWidget() tab.addTab(widget, "标题") # 有多个参数,支持显示图标
QDockWidget 窗口Dock
dock_widget = QDockWidget("标题", parent) dock_widget.setFeatures(QDockWidget.DockWidgetMovable) # 可以拖动,其他功能看doc dock_widget.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea) # 设置停靠的区域。这里是主窗口左右两边 dock_widget.setWidget(widget) # 把widget放入dock内部 self.addDockWidget(Qt.RightDockWidgetArea, dock_widget) # 将dock窗口添加到主窗口中,这里的self用的QMainWindow。给他默认停靠位置
ToolBar工具栏
toolbar = self.addToolBar("标题") toolbar.addAction(QAction) #增加按钮QAction
QMenuBar 菜单栏
memubar = QMenuBar(self) # self=主窗体,QMainWindow menuItem = menubar.addMenu("File") # 增加一个主菜单 menuItem.addAction(QAction) # 增加子菜单 menuItem.addSeperator() # 增加一个分割线 menuItem.setShortcut("Ctrl+N") # 设置快捷键 child_item = menuItem.addMenu("xx") # 增加子菜单
QAction 动作(放在菜单和工具栏上面)
action = QAction("名字", self) #self=主窗体,QMainWindow action = QAction(QIcon(), "名字", self) # 可以显示图标 action.triggered.connect(callable) # 点击事件 action.setShortcut("Ctrl + Q") # 设置快捷键 action.setCheckable(True) # 设置为选择菜单 action.setChecked(False) # 是否默认选择
QTextEdit 文本编辑框
text = QTextEdit() text.setText("str") # 设置文本 cursor = text.textCursor() # 获取光标的位置,这样可以选择,修改颜色,指定地方插入文本等 cursor.movePosition(QTextCursor.End) #移动光标位置 -末尾 cursor.insertText("str") # 插入文本 text.setTextCursor(cursor) text.ensureCursorVisible()
欢迎微信搜索"游戏测试开发"关注一起沟通交流。