【PyQt】记录各种组件的使用方法【上】

简介: 使用Python开发GUI界面工具,通常可用选择PyQt框架,非常易使用,而且网上也有很多相关的文档分享。我也是在写了多个GUI界面后,自己整理了一些常用的使用文档,在此分享给大家(PyQt4~PyQt5适用)。

【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()


欢迎微信搜索"游戏测试开发"关注一起沟通交流。

相关文章
|
17天前
|
数据可视化 开发者 Python
Python GUI开发:Tkinter与PyQt的实战应用与对比分析
【10月更文挑战第26天】本文介绍了Python中两种常用的GUI工具包——Tkinter和PyQt。Tkinter内置于Python标准库,适合初学者快速上手,提供基本的GUI组件和方法。PyQt基于Qt库,功能强大且灵活,适用于创建复杂的GUI应用程序。通过实战示例和对比分析,帮助开发者选择合适的工具包以满足项目需求。
62 7
|
1月前
|
Python
Python实用记录(十六):PyQt/PySide6联动VSCode便捷操作指南
本文提供了一份详细的PySide6与VSCode联动的操作指南,包括安装配置VSCode、安装必要的扩展、配置扩展以及编辑和运行PySide6项目。文中还提到了相关工具如uic.exe、rcc.exe和designer.exe的用途,并提供了进一步学习的资源。
290 1
Python实用记录(十六):PyQt/PySide6联动VSCode便捷操作指南
|
2月前
|
Python
5-5|python开启多线程入口必须在main,从python线程(而不是main线程)启动pyQt线程有什么坏处?...
5-5|python开启多线程入口必须在main,从python线程(而不是main线程)启动pyQt线程有什么坏处?...
|
1月前
|
XML JSON Ubuntu
Python实用记录(十五):PyQt/PySide6打包成exe,精简版(nuitka/pyinstaller/auto-py-to-exe)
本文介绍了使用Nuitka、PyInstaller和auto-py-to-exe三种工具将Python的PyQt/PySide6应用打包成exe文件的方法。提供了详细的安装步骤、打包命令和参数说明,适合新手学习和实践。
299 0
|
3月前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
196 1
|
3月前
|
数据可视化 Linux API
Tkinter与PyQt的对比
【8月更文挑战第3天】本文对比了Python中两大GUI工具包Tkinter与PyQt。Tkinter作为Python标准库的一部分,易于学习且轻量级,适合快速开发简单的跨平台GUI应用。PyQt功能强大且灵活,支持复杂应用的开发,更适合有经验的开发者。通过示例代码展示了如何使用这两种工具包创建基本的GUI应用及图像查看器,帮助读者理解它们的不同之处。选择哪个工具包取决于项目的具体需求、开发者的经验以及对功能和性能的要求。
104 4
|
4月前
|
开发者 Python
Python函数与模块使用方法
【7月更文挑战第24天】Python 是一种功能强大的编程语言,拥有丰富的函数和模块,使得开发者能够轻松地构建复杂的应用程序。本文将介绍 Python 中函数和模块的基本使用方法,并提供一些代码实例。
47 3
|
4月前
|
存储 对象存储 Python
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
|
5月前
|
定位技术 Python
Python的try、except异常处理模块使用方法
所以,我们就解决了由于可能具有的arcpy.ExecuteError异常而导致的程序中断问题;大家在实际使用时,按照自己程序中可能出现的报错类,对本文出现的arcpy.ExecuteError异常类加以修改即可。
|
4月前
|
安全 Java 开发者
Python中的多线程高级使用方法
**Python多线程高级指南摘要** 本文探讨了Python中多线程的高级技术,尽管GIL限制了并行执行,但多线程仍适用于IO密集型任务和提升UI响应。内容包括: - 使用`threading`模块导入和创建线程,示例展示了如何启动多个线程执行函数。 - 高级用法涉及线程池,通过`ThreadPoolExecutor`管理线程,简化大量线程的创建和控制。 - 线程同步:介绍锁和条件变量的概念,以及如何使用它们确保数据一致性。 - 避免死锁的策略,如使用`try/finally`确保锁的正确释放 - 线程局部数据(Thread Local Data)允许每个线程拥有独立的数据副本,避免冲突