我想了解什么是猴子补丁或猴子补丁?
这类似于方法/运算符重载或委托吗?
这些东西有什么共同之处吗?
有什么区别QTextEdit和QPlainTextEdit,为什么使用一个而不是另一个?
我正在编写一个文本编辑器作为学习Qt5的练习,现在我想知道是否使用QTextEdit或QPlainTextEdit.到目前为止,我只发现你可以显示图像QTextEdit,但除此之外,它们看起来与我相似.我的文本编辑器应该支持一些基本的语法高亮(可能使用textChanged()信号),但这几乎与需求一样.
谷歌搜索"QTextEdit vs QPlainTextEdit"和"QTextEdit与QPlainTextEdit相比"并没有给我任何可以比较两个类的结果.
堆栈溢出.再一次,我在一个迫切需要的时候来找你,在疯狂的边缘岌岌可危地摇摇欲坠.这个问题 - 从标题中可以看出 - 是我在这里回答的其他几个问题的合并.
我有一个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记录器的print功能更改为tqdm.write使得记录消息不会干扰tqdm的进度条?谢谢!
是否有可能在需要时在运行时创建信号?
我在一个函数中做这样的事情:
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?
干杯。
我正在尝试找到一种方法,与其他打印一起获取 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 更新一行,而只是当前状态,因为它将打印在命令行上。
知道如何做到这一点吗?谢谢!
我几天来一直在使用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)