我希望---用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) 使用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) 我有一个生成菜单项的应用程序,我想设置特定子菜单的可见性.
我试过用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"的子菜单
任何人都可以给我一个想法......
如何在没有继承的情况下处理鼠标事件,用例可以描述如下:
假设我想让QLabel对象变为handel MouseMoveEvent,教程中的方式通常会影响我们创建一个从QLabel继承的新类.但是我可以使用lambda表达式来处理事件而不需要继承
ql = QLabel()
ql.mouseMoveEvent = lambda e : print e.x(), e.y()
Run Code Online (Sandbox Code Playgroud)
所以我不需要编写整个类,只需使用简单的lambda表达式来实现一些简单的事件.
我一直在尝试在我的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
我已经查看了我的路径,但没有找到我发现的在线提示帮助了我.我该如何解决?
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 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) 我正在尝试使用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当我尝试运行它时,我得到了:
这是文件夹目录:
嗨,我想做一个日志管理员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) 我试图用 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 ×8
pyqt ×5
pyqt4 ×5
events ×1
gulp ×1
handler ×1
hide ×1
javascript ×1
layout ×1
logging ×1
macos ×1
matplotlib ×1
osx-leopard ×1
pyside ×1
python-sip ×1
qobject ×1
qpainter ×1
qscrollarea ×1
qtcore ×1
qthread ×1
qtimer ×1
require ×1
submenu ×1
webpack ×1