标签: pyqt5

Pyqt5 qthread +信号无效+ gui冻结

我正在尝试用imaplib 创建一个邮箱检查器,它与python,队列和多线程没有gui工作得很好.

但是当我试图把一个gui,我所做的每一个功能,让gui冻结直到完成.

我从各种d​​oc(添加qthread,signal,cursorr etcc)尝试了很多东西,而且没有一个教程对我有用.

有人可以帮助我理解如何在运行函数时设置或附加文本到QtextEdit,因为它只在完成后工作.

这是我的代码:

class Checker(QtCore.QThread):
    signal = QtCore.pyqtSignal(object)

    def __init__(self, lignesmailtocheck):
        QtCore.QThread.__init__(self)
        self.lignesmailtocheck = lignesmailtocheck

    def run(self):
            lignemailtocheck = self.lignesmailtocheck.strip()                        
            maillo, passo = lignemailtocheck.split(":",1)
            debmail, finmail = maillo.split("@",1)
            setimap =["oultook.com:imap-mail.outlook.com", "gmail.com:imap.gmail.com"]
            for lignesimaptocheck in sorted(setimap):
                    ligneimaptocheck = lignesimaptocheck.strip()
                    fai, imap = ligneimaptocheck.split(":",1)                                
                    if finmail == fai:
                            passo0 = passo.rstrip()
                            try :
                                    mail = imaplib.IMAP4_SSL(imap)
                                    mail.login(maillo, passo)
                                    mailboxok = open("MailBoxOk.txt", "a+", encoding='utf-8', errors='ignore')
                                    mailboxok.write(maillo+":"+passo+"\n")
                                    mailboxok.close()
                                    totaly = maillo+":"+passo0+":"+imap                                
                                    print(maillo+":"+passo+"\n")

                                    self.send_text.emit(totaly)
                                    time.sleep(1)
                            except imaplib.IMAP4.error:                          
                                           print ("LOGIN …
Run Code Online (Sandbox Code Playgroud)

python pyqt python-multithreading pyqt5

13
推荐指数
1
解决办法
1万
查看次数

PyQt5:居中对齐标签

这应该很简单,但我找不到答案.我试过这个PyQt4代码:

label.setAlignment(Qt.AlignCenter)
Run Code Online (Sandbox Code Playgroud)

但这没有给我带来好运.

谢谢

python pyqt pyqt5

12
推荐指数
3
解决办法
4万
查看次数

只有https页面的Python抓取javascript网页才会失败

我正在使用PyQt5来抓取网页,这对于http:// URL非常有用,但对于https:// URL则完全没有.

我脚本的相关部分如下:

class WebPage(QWebPage):
    def __init__(self):
        super(WebPage, self).__init__()

        self.timerScreen = QTimer()
        self.timerScreen.setInterval(2000)
        self.timerScreen.setSingleShot(True)
        self.timerScreen.timeout.connect(self.handleLoadFinished)

        self.loadFinished.connect(self.timerScreen.start)


    def start(self, urls):
        self._urls = iter(urls)
        self.fetchNext()

    def fetchNext(self):
        try:
            url = next(self._urls)
        except StopIteration:
            return False
        else:
            self.mainFrame().load(QUrl(url))
        return True

    def processCurrentPage(self):
        url = self.mainFrame().url().toString()
        html = self.mainFrame().toHtml()

        #Do stuff with html
        print('loaded: [%d bytes] %s' % (self.bytesReceived(), url))

    def handleLoadFinished(self):
        self.processCurrentPage()
        if not self.fetchNext():
            qApp.quit()
Run Code Online (Sandbox Code Playgroud)

对于安全页面,脚本返回空白页面.回来的唯一html就是<html><head></head><body></body></html>.

我有点失落.我是否缺少与处理安全URL相关的设置?

python ssl https pyqt pyqt5

12
推荐指数
1
解决办法
434
查看次数

如何使用PyQt5显示Pandas数据帧

我有一个问题,下面的行self.tableView.set??????????(df)应该在PyQt5中显示数据帧.我放 ???那里我错过了我需要的代码.

def btn_clk(self):
        path = self.lineEdit.text()
        df = pd.read_csv(path)
        self.tableView.set??????????(df)
Run Code Online (Sandbox Code Playgroud)

其余的代码可以工作,因为如果我print(df)在上面的代码中使用,数据框就会在IPython控制台中打印出来.所以,Pandas读取CSV并打印出来.

但是,我尝试了很多东西让它在PyQt5中显示出来并且没有任何效果.我对PyQt不太熟悉,刚刚开始玩它而且我被困在这里.

这是我的代码:

from PyQt5 import QtCore, QtGui, QtWidgets
import pandas as pd
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(662, 512)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setObjectName("lineEdit")
        self.verticalLayout.addWidget(self.lineEdit)
        self.tableView = QtWidgets.QTableView(self.centralwidget)
        self.tableView.setObjectName("tableView")
        self.verticalLayout.addWidget(self.tableView)
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setObjectName("pushButton")
        self.verticalLayout.addWidget(self.pushButton)
        self.horizontalLayout.addLayout(self.verticalLayout)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 662, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow) …
Run Code Online (Sandbox Code Playgroud)

python pyqt qtableview pandas pyqt5

12
推荐指数
1
解决办法
1万
查看次数

使用pyinstaller时出错:UnicodeDecodeError:'utf-8'编解码器无法解码字节0xff

当我使用pyinstaller编译PyQt代码时,我遇到了一个问题.

我用这行来编译:

c:\Anaconda3\Scripts\pyinstaller.exe -y -F --distpath="." MyQt.py
Run Code Online (Sandbox Code Playgroud)

然后我收到此错误消息:

      File "c:\anaconda36bis\lib\site-packages\PyInstaller\hooks\hook-zmq.py", line
18, in <module>
    hiddenimports.extend(collect_submodules('zmq.backend'))
  File "c:\anaconda36bis\lib\site-packages\PyInstaller\utils\hooks\__init__.py",
 line 619, in collect_submodules
    repr(pkg_dir), package))
  File "c:\anaconda36bis\lib\site-packages\PyInstaller\utils\hooks\__init__.py",
 line 90, in exec_statement
    return __exec_python_cmd(cmd)
  File "c:\anaconda36bis\lib\site-packages\PyInstaller\utils\hooks\__init__.py",
 line 77, in __exec_python_cmd
    txt = exec_python(*cmd, env=pp_env)
  File "c:\anaconda36bis\lib\site-packages\PyInstaller\compat.py", line 562, in
exec_python
    return exec_command(*cmdargs, **kwargs)
  File "c:\anaconda36bis\lib\site-packages\PyInstaller\compat.py", line 369, in
exec_command
    out = out.decode(encoding)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 152: invali
d start byte
Run Code Online (Sandbox Code Playgroud)

我不清楚错误信息,我不明白为什么会这样.

pyinstaller是否可能尝试使用不兼容的模块?我在我的脚本中使用这些:

# -*- coding: utf-8 -*- …
Run Code Online (Sandbox Code Playgroud)

python pyinstaller pyqt5

12
推荐指数
3
解决办法
1万
查看次数

在Qt小部件中的黑暗主题?

背景

我正在构建一个PyQt5应用程序,我希望它有一个黑暗的主题.以前我曾经使用Android开发,我可以为整个应用程序设置一个黑暗的主题

是否在Qt中内置了一个黑暗的主题(适用于应用程序中的所有小部件,这是跨平台的)?

qt pyqt qstyle qt5 pyqt5

12
推荐指数
3
解决办法
1万
查看次数

为什么在 pyqt5 中我应该使用 pyuic5 而不是 uic.loadUi("my.ui")?

我一直在试验QT5Python,使用pyqt5. 我注意到大多数教程都推荐使用pyuic5将 XML UI 转换为 Python 代码。我还看过一些教程,他们使用uic.loadUi("myui.ui")来动态加载XML UI. 这对我来说似乎是一个更简洁、更模块化的解决方案,但它似乎是一个不受欢迎的选择。是否有理由pyuic5使用更完善的解决方案来转换您的代码?

python pyqt pyqt5

12
推荐指数
1
解决办法
5993
查看次数

QScintilla中的色素

考虑这个mcve:

import math
import sys
import textwrap
import time
from pathlib import Path
from collections import defaultdict

from PyQt5.Qsci import QsciLexerCustom, QsciScintilla
from PyQt5.Qt import *

from pygments import lexers, styles, highlight, formatters
from pygments.lexer import Error, RegexLexer, Text, _TokenType
from pygments.style import Style


EXTRA_STYLES = {
    "monokai": {
        "background": "#272822",
        "caret": "#F8F8F0",
        "foreground": "#F8F8F2",
        "invisibles": "#F8F8F259",
        "lineHighlight": "#3E3D32",
        "selection": "#49483E",
        "findHighlight": "#FFE792",
        "findHighlightForeground": "#000000",
        "selectionBorder": "#222218",
        "activeGuide": "#9D550FB0",
        "misspelling": "#F92672",
        "bracketsForeground": "#F8F8F2A5",
        "bracketsOptions": "underline",
        "bracketContentsForeground": "#F8F8F2A5",
        "bracketContentsOptions": "underline",
        "tagsOptions": …
Run Code Online (Sandbox Code Playgroud)

python scintilla pygments qscintilla pyqt5

12
推荐指数
1
解决办法
1920
查看次数

如何在 Python 中显示 SVG 图像

我正在阅读有关如何用 Python 编写国际象棋程序的教程。

它使用python-chess引擎。该引擎的函数显然会返回 SVG 数据,可用于显示棋盘。

  • 教程中的代码:
import chess
import chess.svg

from IPython.display import SVG

board = chess.Board()
SVG(chess.svg.board(board=board,size=400))  
Run Code Online (Sandbox Code Playgroud)

但是当我运行该代码时,我看到的只是终端中的一行,没有图像。

<IPython.core.display.SVG object>

本教程简要介绍了 Jupyter Notebooks 以及如何使用它们来显示 SVG 图像。我没有使用 Jupyter Notebooks 的经验,尽管我从 pip 安装了这个包并且稍微了解了如何使用它,但我在解决原来的棋盘问题上并没有取得太大进展。但我确实拥有使用 C++ 进行 Qt 开发的经验,并且由于 Qt 具有 Python 绑定,因此我决定使用这些绑定。

这是我写的:

import sys
import chess
import chess.svg
from PyQt5 import QtGui, QtSvg
from PyQt5.QtWidgets import QApplication
from IPython.display import SVG, display

app = QApplication(sys.argv);

board = chess.Board(); 
svgWidget = QtSvg.QSvgWidget(chess.svg.board(board=board, size=400));
#svgWidget.setGeometry(50,50,759,668)
svgWidget.show()

sys.exit(app.exec_()) …
Run Code Online (Sandbox Code Playgroud)

python svg pyqt pyqt5 python-chess

12
推荐指数
1
解决办法
2万
查看次数

应用程序未在 macOS Big Sur 11.0.1 上弹出

升级您的操作系统总是有风险的。您很可能会遇到一些兼容性问题。我冒险将我的 macOS 从 Catalina 升级到最新的 Big Sur。之后,新操作系统中的显示看起来很漂亮,但是我所有的 PyQt5 应用程序都无法在这个新操作系统中启动。GUI 窗口没有像往常一样弹出,终端中也没有显示错误信息。我花了一整天的时间试图找出导致这个问题的原因。我找到了解决方案,但以一种奇怪的方式让我感到困惑。

事实证明,在我在主脚本中添加以下三行后,应用程序恢复正常。

import matplotlib
import matplotlib.pyplot as plt

matplotlib.use('TkAgg')
Run Code Online (Sandbox Code Playgroud)

在我看来,新操作系统与 Qt5Agg 后端存在一些兼容性问题。但奇怪的是,这个解决方案也适用于 Pyqt5 应用程序之一,我根本不使用 matplotlib。

我用的Python版本是3.8.4,我手上的PyQt5版本是5.15.1。

我希望有人可以向我解释使该解决方案起作用的幕后情况。我也希望这个临时解决方案可以帮助遇到同样问题的人。

python matplotlib pyqt5 macos-big-sur

12
推荐指数
2
解决办法
2703
查看次数