我想在调整小部件大小时采取行动.
有没有办法在没有在该窗口小部件上安装事件过滤器的情况下捕获它(显然,没有子类化它)?AFAIK,QWidget没有resized
信号.
是否可以仅使用matplotlib绘制表格?如果我取消注释该行
plt.bar(index, data[row], bar_width, bottom=y_offset, color=colors[row])
Run Code Online (Sandbox Code Playgroud)
在此示例代码中,该图仍然可见.我希望在我的(PyQt)窗口顶部和一个绘图下面有一个表(中间有一些空格).
所以我一直用我的Python应用程序用Qt创建我的GUI.我现在遇到这样一种情况:按下按钮后执行适当的延迟执行,我们执行一些任务然后我需要打开一个包含一两件事的单独窗口.但我似乎无法弄清楚如何创建这个新的单独窗口.谁能给我一个如何创建一个的例子?
我看了很多问题,但仍然无法弄清楚这一点.我正在使用PyQt,我希望运行ffmpeg -i file.mp4 file.avi
并获取输出,因为我可以创建一个进度条.
我看过这些问题: ffmpeg可以显示进度条吗? 从子进程实时捕获stdout
我能够使用以下代码查看rsync命令的输出:
import subprocess, time, os, sys
cmd = "rsync -vaz -P source/ dest/"
p, line = True, 'start'
p = subprocess.Popen(cmd,
shell=True,
bufsize=64,
stdin=subprocess.PIPE,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE)
for line in p.stdout:
print("OUTPUT>>> " + str(line.rstrip()))
p.stdout.flush()
Run Code Online (Sandbox Code Playgroud)
但是当我更改命令时,ffmpeg -i file.mp4 file.avi
我没有收到任何输出.我猜这与stdout/output缓冲有关,但是我不知道如何读取看起来像的行
frame= 51 fps= 27 q=31.0 Lsize= 769kB time=2.04 bitrate=3092.8kbits/s
Run Code Online (Sandbox Code Playgroud)
我可以用来计算进度.
有人可以告诉我一个如何从ffmpeg获取此信息到python的示例,无论是否使用PyQt(如果可能)
编辑: 我最终使用jlp的解决方案,我的代码看起来像这样:
#!/usr/bin/python
import pexpect
cmd = 'ffmpeg -i file.MTS file.avi'
thread = pexpect.spawn(cmd)
print "started %s" % cmd …
Run Code Online (Sandbox Code Playgroud) 我有一个使用PyQt的Python程序,旨在在Windows上运行.该程序进行了大量操作并打印了大量信息.但是,由于我想要冻结它并且不希望出现提示屏幕,我希望所有信息都显示在主应用程序中,在QTextEdit中.我如何使程序工作,以便从解释器获取输出并同时在textEdit上显示它,就像在真正的解释器上一样?
我需要一些帮助添加一些项目到QComboBox
.所以,我有两个组合框,一个additem
填充另一个取决于所选项目.
我的问题是,使用clear()
新项目,它可以工作,但如果我选择其他选项combobox
,它会添加新项目,但之前的项目已经消失,新项目下面有空白项目.
我想每次我从第一个选择一个新选项QComboBox
,清除第二个的内容additem
,我使用clear()
了第二个,但它没有工作.
这就是我想到的:
self.comboBox_2.clear()
for index,i in enumerate(list1):
self.comboBox_2.addItem(_fromUtf8(""))
self.comboBox_2.setItemText(index+2, QApplication.translate("Dialog", i, None, QApplication.UnicodeUTF8))
Run Code Online (Sandbox Code Playgroud)
以上是第一次combobox
更改时执行的函数的一部分.
我正在阅读有关PyQt5的一些文档,以提出一个简单的信号槽机制.由于设计考虑,我已经停止了.
请考虑以下代码:
import sys
from PyQt5.QtCore import (Qt, pyqtSignal)
from PyQt5.QtWidgets import (QWidget, QLCDNumber, QSlider,
QVBoxLayout, QApplication)
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def printLabel(self, str):
print(str)
def logLabel(self, str):
'''log to a file'''
pass
def initUI(self):
lcd = QLCDNumber(self)
sld = QSlider(Qt.Horizontal, self)
vbox = QVBoxLayout()
vbox.addWidget(lcd)
vbox.addWidget(sld)
self.setLayout(vbox)
#redundant connections
sld.valueChanged.connect(lcd.display)
sld.valueChanged.connect(self.printLabel)
sld.valueChanged.connect(self.logLabel)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Signal & slot')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
要跟踪对滑块所做的更改,我只需打印并记录所做的更改.我不喜欢的代码是我需要调用sld.valueChanged
插槽三次将相同的信息发送到3个不同的插槽.
是否可以创建自己的pyqtSignal
,将整数发送到单个槽函数.反过来,插槽功能会发出需要进行的更改吗? …
如何在OS X Sierra的Mac上使用PyQt 4或5?似乎我必须等待PyQt的新版本,但我不确定这是否真的如此.
在下面的示例代码中(受此处影响很大),我希望选择单击单元格的整行而不是单个单元格.如何更改代码以包含该代码?
import re
import operator
import os
import sys
import sqlite3
import cookies
from PyQt4.QtCore import *
from PyQt4.QtGui import *
def main():
app = QApplication(sys.argv)
w = MyWindow()
w.show()
sys.exit(app.exec_())
class MyWindow(QWidget):
def __init__(self, *args):
QWidget.__init__(self, *args)
# data
self.tabledata = [('apple', 'red', 'small'),
('apple', 'red', 'medium'),
('apple', 'green', 'small'),
('banana', 'yellow', 'large')]
self.header = ['fruit', 'color', 'size']
# create table
self.createTable()
# layout
layout = QVBoxLayout()
layout.addWidget(self.tv)
self.setLayout(layout)
def createTable(self):
# create the view
self.tv = …
Run Code Online (Sandbox Code Playgroud) 我现在正在研究PyQt,我必须在Android上创建应用程序,我已经看到了kivy库,但它太粗糙了.
现在有没有办法在PyQt上运行Android上的应用程序?
pyqt ×10
python ×8
pyqt4 ×2
pyqt5 ×2
android ×1
ffmpeg ×1
macos ×1
matplotlib ×1
python-3.x ×1
qcombobox ×1
qt ×1
qt4 ×1
qtableview ×1
selection ×1
signals ×1
stdout ×1
subprocess ×1