小编Shu*_*man的帖子

如何在pyqt中使用moveToThread()正确使用QThread?

我读了这篇文章如何真正地,真正地使用QThreads; 完整解释,它说而不是子类qthread,并重新实现run(),应该使用moveToThread使用moveToThread(QThread*)将QObject推送到QThread实例

这是c ++示例,但我不知道如何将其转换为python代码.

class Worker : public QObject
 {
     Q_OBJECT
     QThread workerThread;

 public slots:
     void doWork(const QString &parameter) {
         // ...
         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)

python multithreading pyqt nonblocking qthread

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

在上下文管理器中,没有值的收益是什么

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在使用这个装饰器时被执行?

python yield generator contextmanager

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

从命令行更改konsole选项卡标题并使其持久化?

如何更改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"

shell kde konsole qdbus

10
推荐指数
5
解决办法
2万
查看次数

请求response.iter_content()得到不完整的文件(1024MB而不是1.5GB)?

您好我一直在使用此代码段从网站下载文件,到目前为止,小于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)

python urllib web-scraping python-requests

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

如何在没有得到整个回购的情况下git克隆特定标签?

我想获得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)

git git-clone

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

cx_freeze如何包含第三方模块,ImportError:没有名为progressbar的模块

我在使用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)

python packages py2exe pyinstaller cx-freeze

6
推荐指数
0
解决办法
7040
查看次数

如何像 KSnapshot 中那样在 QLabel 上使用 QRubberBand 选择区域?

我正在用 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)

drag-and-drop pyqt qpainter qgraphicsview qlabel

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

`shopt -s lastpipe` 如何影响 bash 脚本行为?

我正在尝试使ffcast屏幕投射工具 bash 4.1 向后兼容。

在这个ffcast.bash脚本中,有一行

shopt -s extglob lastpipe
Run Code Online (Sandbox Code Playgroud)

lastpipe 选项仅在 bash 4.3 之后可用,我该怎么做才能模拟它的效果?

bash shell

6
推荐指数
2
解决办法
3208
查看次数

如何从Python中的logging.formatter对象获取格式化程序字符串?

嗨,我想做一个日志管理员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)

python logging

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

如何测试是否在 windowFlags 中设置了 WindowStaysOnTopHint 标志?

这应该返回一个布尔值吗?

>>> 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)

python flags bit-manipulation pyqt always-on-top

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