我读了这篇文章如何真正地,真正地使用QThreads; 完整解释,它说而不是子类qthread,并重新实现run(),应该使用moveToThread使用moveToThread(QThread*)将QObject推送到QThread实例
这是c ++示例,但我不知道如何将其转换为python代码.
class Worker : public QObject
{
Q_OBJECT
QThread workerThread;
public slots:
void doWork(const QString ¶meter) {
// ...
emit resultReady(result);
}
signals:
void resultReady(const QString &result);
};
class Controller : public QObject
{
Q_OBJECT
QThread workerThread;
public:
Controller() {
Worker *worker = new Worker;
worker->moveToThread(&workerThread);
connect(workerThread, SIGNAL(finished()), worker, SLOT(deleteLater()));
connect(this, SIGNAL(operate(QString)), worker, SLOT(doWork(QString)));
connect(worker, SIGNAL(resultReady(QString)), this, SLOT(handleResults(QString)));
workerThread.start();
}
~Controller() {
workerThread.quit();
workerThread.wait();
}
public slots:
void handleResults(const QString &);
signals:
void operate(const QString …Run Code Online (Sandbox Code Playgroud) import contextlib
import time
@contextlib.contextmanager
def time_print(task_name):
t = time.time()
try:
yield
finally:
print task_name, "took", time.time() - t, "seconds."
def doproc():
x=1+1
with time_print("processes"):
[doproc() for _ in range(500)]
# processes took 15.236166954 seconds.
Run Code Online (Sandbox Code Playgroud)
什么时候doproc在使用这个装饰器时被执行?
如何更改konsole选项卡标题?默认情况下,它设置为%u : %n,因此它始终自动更改.
我可以设置它:
qdbus org.kde.konsole $KONSOLE_DBUS_SESSION setTitle 1 "My Title"
Run Code Online (Sandbox Code Playgroud)
但是只要你在控制台中运行一些东西,它就会变回%u : %n.当然.我可以将它设置%w为告诉它将标题设置为"由shell设置的窗口标题",但稍后(如果我没有明确设置它),它将为空.(除非我设置它,否则每个新选项卡都将为空.)
问题是如何使其持久化(或如何通过命令行切换配置文件)?我可以创建另一个标题格式设置的配置文件%w,在设置自定义标题之前,切换到该配置文件.
编辑:我想我找到了答案
qdbus org.kde.konsole $ KONSOLE_DBUS_SESSION setTabTitleFormat 0""qdbus org.kde.konsole $ KONSOLE_DBUS_SESSION setTitle 0"My Title"
您好我一直在使用此代码段从网站下载文件,到目前为止,小于1GB的文件都很好.但我注意到1.5GB的文件不完整
# s is requests session object
r = s.get(fileUrl, headers=headers, stream=True)
start_time = time.time()
with open(local_filename, 'wb') as f:
count = 1
block_size = 512
try:
total_size = int(r.headers.get('content-length'))
print 'file total size :',total_size
except TypeError:
print 'using dummy length !!!'
total_size = 10000000
for chunk in r.iter_content(chunk_size=block_size):
if chunk: # filter out keep-alive new chunks
duration = time.time() - start_time
progress_size = int(count * block_size)
if duration == 0:
duration = 0.1
speed = int(progress_size / (1024 * …Run Code Online (Sandbox Code Playgroud) 我想获得linux内核2.6.22.19源代码来为我的路由器交叉编译东西,但是如果我做的话,repo是巨大的(3gb)
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
Run Code Online (Sandbox Code Playgroud)
然后看看那个标签,克隆花了很长时间,我的带宽是有限的.
如果我跑这个
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v2.6.22.19 --single-branch
Run Code Online (Sandbox Code Playgroud)
收到的文件大小约为150mb,这是正确的做法,这个命令是什么意思?v2.6.22.19是标签名称对吗?为什么它可以加床后 - 分支?
克隆后.
[oglop@localhost linux-stable]$ git status
# Not currently on any branch.
Run Code Online (Sandbox Code Playgroud) 我在使用cx_freeze时遇到了一个问题,如何"包含"第三方模块或软件包?根据文档,它似乎很容易,但...我的环境:win7 x64 python 2.7.5 x64
这是我的setup.py
#!/usr/bin/env python2
from cx_Freeze import setup, Executable
includefiles = []
includes = []
excludes = []
packages = ["lxml","lxml._elementpath","lxml.etree","lxml.html",'selenium','jinja2',
"progressbar"]
setup(
name = 'myTool',
version = '0.1',
description = 'Brought to you by xxx',
author = 'tool',
author_email = 'tool@me.com',
options = {'build_exe': {'includes':includes,'excludes':excludes,'packages':packages,'include_files':includefiles}},
executables = [Executable('myTool.py')]
)
Run Code Online (Sandbox Code Playgroud)
我有问题,包括我通过pip安装的包进度条.
这是我简化的.py主程序
#!/usr/bin/env python2
# from progressbar import FileTransferSpeed,Percentage,ETA,Bar,ProgressBar
# print FileTransferSpeed
import progressbar
print "yeah !"
Run Code Online (Sandbox Code Playgroud)
即使是这两行代码,在运行cxfreeze myTool.py后,我仍然会看到丑陋的模块警告
Missing modules:
? _emx_link imported …Run Code Online (Sandbox Code Playgroud) 我正在用 PyQt 编写一个屏幕截图实用程序,其想法是对整个桌面进行屏幕截图,然后将其显示在 QLabel 中,使窗口全屏显示,用户通过鼠标选择一个区域。
使用 QLabel 可以有效地完成此操作吗?我希望橡皮筋留在屏幕上,并且仍然可以对其进行调整。在这种情况下,我必须使用 QGraphicsScene 吗?
期望效果: http://gfycat.com/SkinnyObeseAquaticleech
这是我到目前为止所拥有的
import sys
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import Qt, QPoint, QRect, QSize
from PyQt4.QtGui import QPixmap, QApplication, QLabel, QRubberBand
class MyLabel(QLabel):
def __init__(self, parent=None):
QLabel.__init__(self, parent)
self.rubberBand = QRubberBand(QRubberBand.Rectangle, self)
self.origin = QPoint()
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.origin = QPoint(event.pos())
self.rubberBand.setGeometry(QRect(self.origin, QSize()))
self.rubberBand.show()
def mouseMoveEvent(self, event):
if not self.origin.isNull():
self.rubberBand.setGeometry(
QRect(self.origin, event.pos()).normalized())
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
self.rubberBand.hide()
class mainUI(QtGui.QWidget): …Run Code Online (Sandbox Code Playgroud) 我正在尝试使ffcast屏幕投射工具 bash 4.1 向后兼容。
在这个ffcast.bash脚本中,有一行
shopt -s extglob lastpipe
Run Code Online (Sandbox Code Playgroud)
lastpipe 选项仅在 bash 4.3 之后可用,我该怎么做才能模拟它的效果?
嗨,我想做一个日志管理员gui.基本上我想得到记录器的树形结构,并在pyqt gui中显示它们的级别和格式化程序.如何从与处理程序对象关联的格式化程序中获取格式字符串?
例如:
import logging
_logger = logging.getLogger('myLogger')
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)s:%(levelname)s: %(message)s')
ch.setFormatter(formatter)
_logger.addHandler(ch)
_logger.propagate=0
Run Code Online (Sandbox Code Playgroud)
现在我有_logger,如何从logging.Formatter对象中获取字符串'%(name)s:%(levelname)s:%(message)s'?
>>> _logger.handlers[0]
<logging.StreamHandler object at 0x13807610>
>>> _logger.handlers[0].formatter
<logging.Formatter object at 0x13807690>
Run Code Online (Sandbox Code Playgroud) 这应该返回一个布尔值吗?
>>> win.windowFlags() & QtCore.Qt.WindowStaysOnTopHint
<PyQt4.QtCore.WindowFlags object at 0x7ad0578>
Run Code Online (Sandbox Code Playgroud)
我已经知道了
# enable always on top
win.windowFlags() | QtCore.Qt.WindowStaysOnTopHint
# disable it
win.windowFlags() & ~QtCore.Qt.WindowStaysOnTopHint
# toggle it
win.windowFlags() ^ QtCore.Qt.WindowStaysOnTopHint
Run Code Online (Sandbox Code Playgroud)