相关疑难解决方法(0)

什么是猴子补丁?

我想了解什么是猴子补丁或猴子补丁?

这类似于方法/运算符重载或委托吗?

这些东西有什么共同之处吗?

python monkeypatching terminology

496
推荐指数
8
解决办法
17万
查看次数

QTextEdit vs QPlainTextEdit

有什么区别QTextEditQPlainTextEdit,为什么使用一个而不是另一个?

我正在编写一个文本编辑器作为学习Qt5的练习,现在我想知道是否使用QTextEditQPlainTextEdit.到目前为止,我只发现你可以显示图像QTextEdit,但除此之外,它们看起来与我相似.我的文本编辑器应该支持一些基本的语法高亮(可能使用textChanged()信号),但这几乎与需求一样.

谷歌搜索"QTextEdit vs QPlainTextEdit""QTextEdit与QPlainTextEdit相比"并没有给我任何可以比较两个类的结果.

c++ qt qtextedit qplaintextedit qt5

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

将stdout和stderr从辅助线程重定向到PyQt4 QTextEdit

堆栈溢出.再一次,我在一个迫切需要的时候来找你,在疯狂的边缘岌岌可危地摇摇欲坠.这个问题 - 从标题中可以看出 - 是我在这里回答的其他几个问题的合并.

我有一个PyQt应用程序,我想将stdout和stderr流重新路由到我的GUI中的QTextEdit,没有延迟.

最初,我发现以下堆栈溢出答案: https ://stackoverflow.com/a/17145093/629404

这很有效,但有一点需要注意:如果在CPU处理相对较长的方法时多次更新stdout或stderr,则当主线程返回到应用程序循环时,所有更新都会同时显示.不幸的是,我有一些方法需要20秒才能完成(网络相关),因此应用程序变得无响应 - 并且QTextEdit不会更新 - 直到它们完成.

为了解决这个问题,我将所有GUI处理委托给主线程,并且我已经产生了第二个线程以处理更长的网络操作,使用pyqtSignals通知主线程工作何时完成并通过回来的结果.当我开始测试以这种方式编写的代码时,python解释器立刻开始崩溃而没有任何警告.

这是非常令人讨厌的地方:Python正在崩溃,因为 - 使用上面包含的链接中的类 - 我已经将sys.stdout/err流分配给QTextEdit小部件; PyQt小部件不能从除应用程序线程之外的任何线程修改,并且由于对stdout和stderr的更新来自我创建的辅助工作线程,因此它们违反了此规则.我已经注释掉了我重定向输出流的代码部分,果然,程序运行没有错误.

这让我回到原点,让我陷入困惑的境地; 假设我继续在主线程中处理GUI相关操作并处理辅助线程中的计算和更长时间的操作(我已经理解这是在用户触发事件时阻止应用程序阻塞的最佳方法),我该怎么办将Stdout和Stderr从两个线程重定向到QTextEdit小部件?上面链接中的类对于主线程来说效果很好,但是当更新来自第二个线程时,由于上述原因会杀死python.

python multithreading stdout pyqt thread-safety

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

将"print"功能更改为"tqdm.write",以便日志记录不会干扰进度条

我有一个简单的问题:如何将内置的Python记录器的print功能更改为tqdm.write使得记录消息不会干扰tqdm的进度条?谢谢!

python logging tqdm

13
推荐指数
2
解决办法
6330
查看次数

如何动态创建pyqtSignals

是否有可能在需要时在运行时创建信号?

我在一个函数中做这样的事情:

class WSBaseConnector(QObject)

    def __init__(self) -> None:
        super(QObject, self).__init__()    
        self._orderBookListeners: Dict[str, pyqtSignal[OrderBookData]] = {}

    def registerOrderBookListener(self, market: str, listener: Callable[[OrderBookData], None], loop: AbstractEventLoop) -> None:
            try:
                signal = self._orderBookListeners[market]
            except KeyError:
                signal = pyqtSignal(OrderBookData)
                signal.connect(listener)
                self._orderBookListeners[market] = signal
            else:
                signal.connect(listener)
Run Code Online (Sandbox Code Playgroud)

如您所见,我有一个存储 str、pyqtSignal 对的字典。当我尝试将信号连接到侦听器时,出现错误:

'PyQt5.QtCore.pyqtSignal' object has no attribute 'connect'
Run Code Online (Sandbox Code Playgroud)

在没有类变量的情况下,是否无法在运行时创建 pyqtSignals?

干杯。

runtime pyqt signals-slots python-3.x pyqt5

5
推荐指数
1
解决办法
991
查看次数

使用 python tqdm 库重定向 stdout 和 stderr

我在 Python 中使用 tqdm 来显示控制台进度条。

我有一个来自另一个库的函数,它偶尔会写入 tqdm 循环内的 stdout 和 stderr。我无法破解该函数的源代码。

虽然此文档展示了如何重定向 sys.stdout,但它不容易推广到 stderr,因为我只能将 stdout 或 stderr 之一传递给file=tqdm 中的参数__init__。请参阅此问题及其接受的答案,以获取说明问题的最少代码。

如何同时重定向stdout和 stderr?

python tqdm

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

在 QPlainTextEdit 中使用 tqdm 显示终端输出

我正在尝试找到一种方法,与其他打印一起获取 pyqt 应用程序中进度条的结果/演变,例如在 QPlainTextEdit 小部件中。

我面临的问题是,进度条可以使用一些更高级的回车符,甚至更高级的光标定位,而这些大多不被字符串支持。我已经尝试过io.StringIO,但\r仍保持字面意思。

import io
from tqdm import tqdm
s = io.StringIO()
for i in tqdm(range(3), file=s):    
    sleep(.1)
Run Code Online (Sandbox Code Playgroud)

输出:

s.getvalue()

Out[24]: '\n\r  0%|          | 0/3 [00:00<?, ?it/s]\x1b[A\n\r 33%|###3      | 1/3 [00:00<00:00,  9.99it/s]\x1b[A\n\r 67%|######6   | 2/3 [00:00<00:00,  9.98it/s]\x1b[A\n\r100%|##########| 3/3 [00:00<00:00,  9.98it/s]\x1b[A\n\x1b[A'
Run Code Online (Sandbox Code Playgroud)

翻译为:

print(s.getvalue())
  0%|          | 0/3 [00:00<?, ?it/s]
 33%|###3      | 1/3 [00:00<00:00,  9.99it/s]
 67%|######6   | 2/3 [00:00<00:00,  9.98it/s]
100%|##########| 3/3 [00:00<00:00,  9.98it/s]
Run Code Online (Sandbox Code Playgroud)

需要明确的是,在我的输出中,我不想每次 tqdm 更新一行,而只是当前状态,因为它将打印在命令行上。

知道如何做到这一点吗?谢谢!

python pyqt qplaintextedit pyqt5 tqdm

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

在QTextEdit小部件中复制stdout,stderr

我几天来一直在使用PySide程序遇到困难.我不认为这个问题难以置信,因为那里有答案.我遇到的问题似乎都不适合我.

我希望'监听'文件对象stdout和stderr,并在我的PySide程序运行时将内容输出到QText Edit小部件.现在,我已经意识到这个问题(或者类似的东西)之前已经被问过了,但就像我说的那样,由于某种原因无法让它为我工作,而其他大多数解决方案都基于我能做到的那个问题.工作,所以对我来说这几天非常令人沮丧.这个解决方案(OutLog)包含在我下面的代码片段中,以防你们其中一个人可以看到我的拙劣实现.

要记住的事情:

1我在Windows 7上做这个(duuuh,da,da,duh)

2我正在使用eclipse并在IDE中运行它(duh,da,da,duh,DUUUUH:如果建议适用于命令行或IDE,那将非常方便)

3我真的只想在程序运行时将stdout和stderr的输出复制到小部件.对于这种情况,逐行发生将是一个梦想,但即使它在一个循环结束时出现作为一个块或其他东西,这将是晶圆厂.

4哦,关于OutLog,有人可以告诉我,如果在init中将self.out设置为'None' ,这个类实际上可以工作吗?我的意思是,self.out 总是一个NoneType对象,对吧???

任何帮助将不胜感激,即使它只是指向我可以找到更多信息的地方.我一直在努力建立自己的解决方案(我有点像一个虐待狂),但我发现很难找到关于这些对象如何工作的相关信息.

无论如何,抱怨过来.这是我的代码:

#!/usr/bin/env python
import sys
import logging
import system_utilities

log = logging.getLogger()
log.setLevel("DEBUG")
log.addHandler(system_utilities.SystemLogger())

import matplotlib
matplotlib.use("Qt4Agg")
matplotlib.rcParams["backend.qt4"] = "PySide"
import subprocess
import plot_widget

from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure

from PySide import QtCore, QtGui


class MainWindow(QtGui.QMainWindow):
    """This is the main window class and displays the primary UI when launched.
    Inherits from QMainWindow.
    """

    def __init__(self):
        """Init function. 
        """
        super(MainWindow, self).__init__() …
Run Code Online (Sandbox Code Playgroud)

stdout pyqt stderr pyside python-2.7

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