小编ekh*_*oro的帖子

如何旋转QPushButton?

我希望---用Python和Qt4 ---来旋转QPushButton(或至少它的文本),这样它就可以垂直站立.我在网上看过一些文档,但是我无法理解它 - 它在C语言中,我是C语言文盲.

根据我的阅读,我们需要重新实现paintEvent()处理程序,实例化并旋转QPainter().然而,我无法弄清楚如何为我只需要的一个QString或QPushButton做这个.我假设QPaintEvent会有一个"发送者"属性,就像信号一样,但它没有.我似乎可以从这个事件得到的是QRect或QRegion.

如何查找特定于我的按钮或其标签的事件?
或者,因为那是真正的问题,如何旋转QPushButton?

Mru,下面提出了一些C++示例,它完全重新实现了QPushButton.由于我对C++没有任何线索,因为我不需要完全重新实现,所以我试图painEvent()在Python中重新实现处理程序,基于该示例.

这是我翻译的内容,但它不起作用:\

#!/usr/bin/env python


from PyQt4 import QtGui, QtCore
import sys



class RotatedButton(QtGui.QPushButton):
    def __init__(self, text, parent, orientation = "west"):
        QtGui.QPushButton.__init__(self, text, parent)
        self.orientation = orientation

    def paintEvent(self, event):
        painter = QtGui.QStylePainter(self)
        if self.orientation == 'west':
            painter.rotate(90)
        elif self.orientation == 'east':
            painter.rotate(270)
        else:
            raise TypeError
        painter.drawControl(QtGui.QStyle.CE_PushButton, self.getSyleOptions())


    def getSyleOptions(self):

        options = QtGui.QStyleOptionButton()
        options.initFrom(self)        
        size = options.rect.size()
        size.transpose()
        options.rect.setSize(size)
        options.features = QtGui.QStyleOptionButton.None …
Run Code Online (Sandbox Code Playgroud)

python user-interface pyqt4 qpainter

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

PyQt4导致QThread错误

使用PyQt4 4.8.6,下面的代码会产生错误

QObject :: startTimer:QTimer只能用于以QThread启动的线程

当a用作QApplication的变量时,如果cpp(或大多数其他)用于变量,它不会产生错误.这是PyQt4中的错误还是我缺少的东西?

#! /usr/bin/env python

# This is only needed for Python v2 but is harmless for Python v3.
import sip
sip.setapi('QVariant', 2)

from PyQt4 import QtGui

#def main():

if __name__ == '__main__':
    import sys

    if len(sys.argv) > 1:
       use_a = False
       print "Don't use a"
    else:
       use_a = True
       print "Use a"

    if use_a:
       a = QtGui.QApplication(sys.argv)
    else:
       cpp = QtGui.QApplication(sys.argv)

    model = QtGui.QStandardItemModel(4,2)
    tableView = QtGui.QTableView()
    tableView.setModel(model)

    tableView.show()
    if use_a:
       sys.exit(a.exec_())
    else:
       sys.exit(cpp.exec_())


#if …
Run Code Online (Sandbox Code Playgroud)

python pyqt pyqt4 qthread qtimer

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

如何在QMenu中隐藏子菜单

我有一个生成菜单项的应用程序,我想设置特定子菜单的可见性.

我试过用setVisibility(False),但这没用. setVisibility()适用于菜单项,但不适用于QMenus中的子菜单.

看看下面的代码片段:

import sys
from PyQt4 import QtGui

class Window(QtGui.QWidget):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.menu = QtGui.QMenu()
        self.actio1 = QtGui.QAction('One', self)
        self.actio2 = QtGui.QAction('Two', self)
        self.menu.addAction(self.actio1)
        self.menu.addAction(self.actio2)
        self.actio1.setVisible(False)
        self.submenu = QtGui.QMenu('submenu', self)
        self.submenu.addAction('sub one')
        self.submenu.addAction('sub two')
        self.menu.addMenu(self.submenu)        
        self.submenu2 = QtGui.QMenu('submenu 2', self)
        self.submenu2.addAction('sub 2 one')
        self.submenu2.addAction('sub 2 two')
        self.menu.addMenu(self.submenu2)        
        self.submenu2.setVisible(False)
        layout = QtGui.QHBoxLayout()
        layout.addWidget(self.menu)
        self.setLayout(layout)

if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我可以隐藏名为"One"的菜单项,但不能隐藏名为"submenu 2"的子菜单

任何人都可以给我一个想法......

python hide pyqt4 submenu

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

PyQt:如何在没有继承的情况下处理事件

如何在没有继承的情况下处理鼠标事件,用例可以描述如下:

假设我想让QLabel对象变为handel MouseMoveEvent,教程中的方式通常会影响我们创建一个从QLabel继承的新类.但是我可以使用lambda表达式来处理事件而不需要继承

ql = QLabel()
ql.mouseMoveEvent = lambda e : print e.x(), e.y()
Run Code Online (Sandbox Code Playgroud)

所以我不需要编写整个类,只需使用简单的lambda表达式来实现一些简单的事件.

python events pyqt handler pyqt4

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

在PyQt安装期间检查SIP版本不正确

我一直在尝试在我的mac(OSX 10.6.8)上安装PyQt,但我仍然遇到这个问题:

当我尝试安装PyQt-mac-gpl-4.9.6时,我明白了

Error: This version of PyQt requires SIP v4.14.2 or later.
Run Code Online (Sandbox Code Playgroud)

奇怪的是,当我想在控制台上检查sip版本并写入时

sip -V
Run Code Online (Sandbox Code Playgroud)

,我得到了正确的版本:4.14.2

我已经查看了我的路径,但没有找到我发现的在线提示帮助了我.我该如何解决?

macos osx-leopard pyqt python-sip

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

Python PyQt设置滚动区域

QGroupBox一旦它高于400px,我试图使我的可滚动.QGroupBox使用for循环生成其中的内容.这是如何完成的一个例子.

mygroupbox = QtGui.QGroupBox('this is my groupbox')
myform = QtGui.QFormLayout()
labellist = []
combolist = []
for i in range(val):
    labellist.append(QtGui.QLabel('mylabel'))
    combolist.append(QtGui.QComboBox())
    myform.addRow(labellist[i],combolist[i])
mygroupbox.setLayout(myform)
Run Code Online (Sandbox Code Playgroud)

由于值val取决于某些其他因素,myform因此无法确定布局大小.为了解决这个问题,我添加了QScrollableArea这样的内容.

scroll = QtGui.QScrollableArea()
scroll.setWidget(mygroupbox)
scroll.setWidgetResizable(True)
scroll.setFixedHeight(400)
Run Code Online (Sandbox Code Playgroud)

不幸的是,这似乎对groupbox没有任何影响.没有滚动条的迹象.我错过了什么吗?

python layout pyqt pyqt4 qscrollarea

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

'PySide.QtCore.Signal'对象没有属性'connect'

我使用Python 3.4与Pyside 1.2.4和PyQt 4.8.7,当我尝试将信号连接到插槽时,它说:

'PySide.QtCore.Signal'对象没有属性'connect'

我正在使用MVC:

模型:

from PySide.QtCore import Signal
class Model(object):

    def __init__(self):
        self.updateProgress = Signal(int)
Run Code Online (Sandbox Code Playgroud)

控制器:

class Controller(QWidget):
"""
MVC Pattern: Represents the controller class

"""
def __init__(self, parent=None):
    super().__init__(parent)
    self.model = Model()
    self.model.updateProgress.connect(self.setProgress)
Run Code Online (Sandbox Code Playgroud)

当我在Pycharm中查找Class时,通过按住CTRL并单击Signal类,它看起来如下所示:

class Signal(object):
""" Signal """
def __call__(self, *args, **kwargs): # real signature unknown
    """ Call self as a function. """
    pass

def __getitem__(self, *args, **kwargs): # real signature unknown
    """ Return self[key]. """
    pass

def __init__(self, *args, **kwargs): # real signature unknown …
Run Code Online (Sandbox Code Playgroud)

python signals-slots pyside qobject

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

Gulp TypeError:dest.on不是函数

我正在尝试使用Gulp任务生成bundle.js文件

var gulp = require('gulp'),
    gutil = require('gulp-util'),
    wrench = require('wrench'),
    conf = require('./webpack.config'),
    webpack = require('webpack'),
    WebpackDevServer = require('webpack-dev-server');

// Webpack
gulp.task('wp', function() {
  return gulp.src('./assets/scripts/entry.js')
    .pipe(webpack(conf))
    .pipe(gulp.dest('./assets/build1'));
});
Run Code Online (Sandbox Code Playgroud)

但是,TypeError: dest.on is not a function当我尝试运行它时,我得到了:

在此输入图像描述

这是文件夹目录:

在此输入图像描述

javascript require gulp webpack

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

如何从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
查看次数

SystemError:QtCore 初始化失败,但未引发异常

我试图用 matplotlib 绘制一些东西,但是当我像这样导入它时:

import matplotlib.pyplot as plt
Run Code Online (Sandbox Code Playgroud)

在 Pycharm Community 2016.1.4 使用 Anaconda 版本 3.5.1 时,我收到此错误:

from PyQt4 import QtCore
SystemError: initialization of QtCore failed without raising an exception
Run Code Online (Sandbox Code Playgroud)

这里有什么问题吗?我还没有通过谷歌或这里找到任何与我的问题相同的东西。

python pyqt matplotlib qtcore

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