【PyQt】功能模块和名称

请参考专栏《快速掌握PyQt5》 - 知乎

信号与槽

《快速掌握PyQt5》第二章 信号与槽——裁判鸣枪与选手开跑 - 知乎

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton


class Demo(QWidget):                                            # 1
    def __init__(self):
        super(Demo, self).__init__()
        self.button = QPushButton('Start', self)                # 2
        self.button.clicked.connect(self.change_text)           # 3

    def change_text(self):
        print('change text')
        self.button.setText('Stop')                             # 4
        self.button.clicked.disconnect(self.change_text)        # 5


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()                                               # 6
    demo.show()                                                 # 7
    sys.exit(app.exec_())

消息框QMessageBox

《快速掌握PyQt5》第四章 QMessageBox消息框 - 知乎

information 信息框;question 问答框; warning 警告框; critical 错误框; about 关于框( 其实还有一个aboutQt框,是专门用来展示Qt软件信息的,这里不再讲述)。

登录界面

《快速掌握PyQt5》第五章 完善登录框小程序 - 知乎

QPushButton

《快速掌握PyQt5》第七章 各种按钮介绍 - 知乎

  1. 按钮有标记和非标记两种状态,这两种状态下的按钮显示的样子不同。通过setCheckable(True)方法可以将按钮设置为一个可标记的按钮,那此时该按钮就拥有了标记和非标记两种状态了。可以通过isCheckable()方法来判断该按钮是否是可标记的;
  2. 通过setIcon()方法给按钮设置一个图标,传入的参数为QIcon();

显示图标按钮QToolButton

《快速掌握PyQt5》第七章 各种按钮介绍 - 知乎

QToolButton是与工具操作相关的按钮,通常和QToolBar搭配使用。QToolButton一般不用来显示文本,而显示图标QIcon(关于QToolBar我们会在后续介绍QMainWindow的时候再详细讲解)。

请注意不能在QToolButton实例化的时候直接传入文本字符串,因为该控件没有相应的初始化函数。也就是说这样做是错误的:self.test_button = QToolButton('Test', self) 如果要设置文本的话得通过setText()方法。但是setText()方法和setIcon()方法都使用的话,只会显示图标。

多选一QRadioButton

《快速掌握PyQt5》第七章 各种按钮介绍 - 知乎

复选框QCheckBox

《快速掌握PyQt5》第七章 各种按钮介绍 - 知乎

下拉选择框QCombox

《快速掌握PyQt5》第八章 下拉选择框QCombox和数字调节框QSpinBox - 知乎

数字调节框QSpinBox

《快速掌握PyQt5》第八章 下拉选择框QCombox和数字调节框QSpinBox - 知乎

日历控件QCalendarWidget

《快速掌握PyQt5》第十二章 与日期时间相关的控件 - 知乎

时间数字调整QDateTimeEdit

《快速掌握PyQt5》第十二章 与日期时间相关的控件 - 知乎

学会使用文档Qt Assistant

《快速掌握PyQt5》第十三章 学会使用文档——Qt Assistant - 知乎

快速制作界面Qt Designer

《快速掌握PyQt5》第十四章 快速制作界面——Qt Designer - 知乎

组合框QGroupBox

《快速掌握PyQt5》第十五章 组合框QGroupBox和工具箱QToolBox - 知乎

工具箱QToolBox

《快速掌握PyQt5》第十五章 组合框QGroupBox和工具箱QToolBox - 知乎

窗口关闭事件closeEvent

《快速掌握PyQt5》第十七章 事件处理 - 知乎

鼠标事件

《快速掌握PyQt5》第十七章 事件处理 - 知乎

mouseMoveEvent、mousePressEvent、mouseReleaseEvent、mouseDoubleClickEvent

键盘事件

《快速掌握PyQt5》第十七章 事件处理 - 知乎

keyPressEvent、keyReleaseEvent

拖放

《快速掌握PyQt5》第十八章 拖放与剪贴板 - 知乎

拖放分为拖动和放下两个动作,它们涉及到以下事件:

DragEnterEvent: 所拖动目标进入接收该事件的窗口或控件时触发;

DragMoveEvent: 所拖动目标进入窗口或控件后,继续被拖动时触发;

DragLeaveEvent: 所拖动目标离开窗口或控件时触发;

DropEvent: 所拖动目标被放下时触发。

剪贴板

《快速掌握PyQt5》第十八章 拖放与剪贴板 - 知乎

通常我们在Windows或Linux上使用复制都是按ctrl+c然后按ctrl+v进行粘贴(Mac上为command+c和command+v),这其中就涉及到了剪贴板,当进行复制时,其实是将要复制的内容放到了一个无形的剪贴板上,要粘贴时,再将剪贴板上的内容放到界面上。

首先通过mimeData()方法获取剪贴板内容的MIME类型,然后判断mime类型是否为text/plain,是的话则通过text()方法获取,并设为text_browser文本。

当然以上只是针对文本内容,当然还可以复制图片等文件,而剪贴板当然也有相应的方法,以下列出常用的:

列表控件QListWidget

《快速掌握PyQt5》第十九章 列表控件、树形控件、表格控件 - 知乎

树形控件QTreeWidget

《快速掌握PyQt5》第十九章 列表控件、树形控件、表格控件 - 知乎

表格控件QTableWidget

《快速掌握PyQt5》第十九章 列表控件、树形控件、表格控件 - 知乎

颜色对话框QColorDialog

《快速掌握PyQt5》第二十二章 各种对话框介绍 - 知乎

字体对话框QFontDialog

《快速掌握PyQt5》第二十二章 各种对话框介绍 - 知乎

输入对话框QInputDialog\QLineEdit

《快速掌握PyQt5》第二十二章 各种对话框介绍 - 知乎

文件对话框QFileDialog

《快速掌握PyQt5》第二十二章 各种对话框介绍 - 知乎

打印对话框QPrintDialog

主窗口QMainWindow(记事本应用)

《快速掌握PyQt5》第二十三章 主窗口QMainWindow - 知乎

拆分窗口QSplitter

《快速掌握PyQt5》第二十四章 装入更多控件 - 知乎

选项卡控件QTabWidget

《快速掌握PyQt5》第二十四章 装入更多控件 - 知乎

堆栈窗口QStackedWidget

《快速掌握PyQt5》第二十四章 装入更多控件 - 知乎

停靠控件QDockWidget

《快速掌握PyQt5》第二十四章 装入更多控件 - 知乎

看过第二十三章的小伙伴应该知道了QDockWidget是要和QMainWindow一起搭配使用的。我们再次放上这张图:

容纳多文档窗口(多子窗口)QMdiArea, QMdiSubWindow

《快速掌握PyQt5》第二十四章 装入更多控件 - 知乎

数据库

《快速掌握PyQt5》第二十六章 数据库 - 知乎

多线程

《快速掌握PyQt5》第二十七章 多线程 - 知乎

当在执行某些复杂且耗时的操作时,我们不能将该操作放在界面控制线程中(即UI线程,就是app.exec_()所在的线程),否则我们会发现界面停止响应(或卡顿)。

QThread类

要实现多线程,我们要先继承QThread类并重新实现其中的run()函数,也就是说把耗时的操作放入run()函数中。

import sys
from PyQt5.QtCore import Qt, QThread, pyqtSignal
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QHBoxLayout, QVBoxLayout


class Demo(QWidget):
    def __init__(self):
        super(Demo, self).__init__()

        self.button = QPushButton('Start', self)
        self.button.clicked.connect(self.count_func)
        self.button_2 = QPushButton('Stop', self)           # 3
        self.button_2.clicked.connect(self.stop_count_func)

        self.label = QLabel('0', self)
        self.label.setAlignment(Qt.AlignCenter)

        self.my_thread = MyThread()
        self.my_thread.my_signal.connect(self.set_label_func)

        self.h_layout = QHBoxLayout()
        self.v_layout = QVBoxLayout()
        self.h_layout.addWidget(self.button)
        self.h_layout.addWidget(self.button_2)
        self.v_layout.addWidget(self.label)
        self.v_layout.addLayout(self.h_layout)
        self.setLayout(self.v_layout)

    def count_func(self):
        self.my_thread.is_on = True         # 5
        self.my_thread.start()

    def set_label_func(self, num):
        self.label.setText(num)

    def stop_count_func(self):              # 4
        self.my_thread.is_on = False
        self.my_thread.count = 0


class MyThread(QThread):
    my_signal = pyqtSignal(str)

    def __init__(self):
        super(MyThread, self).__init__()
        self.count = 0
        self.is_on = True   # 1

    def run(self):
        while self.is_on:   # 2
            print(self.count)
            self.count += 1
            self.my_signal.emit(str(self.count))
            self.sleep(1)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

简单爬虫实战

import sys
import urllib.request
from PyQt5.QtCore import Qt, QThread, pyqtSignal
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QVBoxLayout


class Demo(QWidget):
    def __init__(self):
        super(Demo, self).__init__()
        self.button = QPushButton('Start', self)
        self.button.clicked.connect(self.start_func)
        self.label = QLabel('Ready to do', self)
        self.label.setAlignment(Qt.AlignCenter)

        self.crawl_thread = CrawlThread()
        self.crawl_thread.status_signal.connect(self.status_func)

        self.v_layout = QVBoxLayout()
        self.v_layout.addWidget(self.label)
        self.v_layout.addWidget(self.button)
        self.setLayout(self.v_layout)

    def start_func(self):
        self.crawl_thread.start()

    def status_func(self, status):
        self.label.setText(status)


class CrawlThread(QThread):
    status_signal = pyqtSignal(str)

    def __init__(self):
        super(CrawlThread, self).__init__()

    def run(self):
        self.status_signal.emit('Crawling')
        response = urllib.request.urlopen('https://www.python.org')
        self.status_signal.emit('Saving')
        with open('python.txt', 'w') as f:
            f.write(response.read().decode('utf-8'))
        self.status_signal.emit('Done')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

QSS

《快速掌握PyQt5》第二十八章 QSS - 知乎

基本规则、选择器类型、子控件、伪状态、

国际化(语言的切换)

《快速掌握PyQt5》第二十九章 国际化 - 知乎

网页交互QWebEngineView

《快速掌握PyQt5》第三十章 网页交互QWebEngineView - 知乎

绘图与打印

绘图操作通常在paintEvent()事件函数中完成。在该函数中,我们一般会先对画笔、画刷或者字体进行设置然后再调用相关方法进行绘制。

音频QSound和QSoundEffect、QMediaPlayer

《快速掌握PyQt5》第三十三章 音频与视频 - 知乎

视频QMovie、QMediaPlayer

《快速掌握PyQt5》第三十三章 音频与视频 - 知乎

图形视图框架QGraphicsItem图元类、QGraphicsScene场景类和QGraphicsView视图类

《快速掌握PyQt5》第三十四章 图形视图框架 - 知乎

网络应用QUdpSocket

《快速掌握PyQt5》第三十五章 网络应用 - 知乎

可视化数据图表PyQtGraph

《快速掌握PyQt5》第三十六章 用PyQtGraph绘制可视化数据图表 - 知乎

动画QPropertyAnimation、QSequentialAnimationGroup、QParallelAnimationGroup、QTimeLine

《快速掌握PyQt5》第三十二章 动画 - 知乎

### 关于ArcGIS License Server无法启动的解决方案 当遇到ArcGIS License Server无法启动的情况,可以从以下几个方面排查并解决问题: #### 1. **检查网络配置** 确保License Server所在的计算机能够被其他客户端正常访问。如果是在局域网环境中部署了ArcGIS Server Local,则需要确认该环境下的网络设置是否允许远程连接AO组件[^1]。 #### 2. **验证服务状态** 检查ArcGIS Server Object Manager (SOM) 的运行情况。通常情况下,在Host SOM机器上需将此服务更改为由本地系统账户登录,并重启相关服务来恢复其正常工作流程[^2]。 #### 3. **审查日志文件** 查看ArcGIS License Manager的日志记录,寻找任何可能指示错误原因的信息。这些日志可以帮助识别具体是什么阻止了许可服务器的成功初始化。 #### 4. **权限问题** 确认用于启动ArcGIS License Server的服务账号具有足够的权限执行所需操作。这包括但不限于读取/写入特定目录的权利以及与其他必要进程通信的能力。 #### 5. **软件版本兼容性** 保证所使用的ArcGIS产品及其依赖项之间存在良好的版本匹配度。不一致可能会导致意外行为完全失败激活license server的功能。 #### 示例代码片段:修改服务登录身份 以下是更改Windows服务登录凭据的一个简单PowerShell脚本例子: ```powershell $serviceName = "ArcGISServerObjectManager" $newUsername = ".\LocalSystemUser" # 替换为实际用户名 $newPassword = ConvertTo-SecureString "" -AsPlainText -Force Set-Service -Name $serviceName -StartupType Automatic New-ServiceCredential -ServiceName $serviceName -Account $newUsername -Password $newPassword Restart-Service -Name $serviceName ``` 上述脚本仅作为示范用途,请依据实际情况调整参数值后再实施。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值