如何QtWidgets.QStackedWidget在 QPushButton.clicked 上滑动页面,如下图(右)所示?动作:在左键按下 QStackedWidget 页面索引将设置为 0 & 在右键按下 QStackedWidget 页面索引将设置为 1

我正在从 .ui 文件加载 QMainWindow - 它工作正常,但不会触发调整大小等窗口事件。我真的无法弄清楚我做错了什么。
这是代码:
class TestWindow(QMainWindow):
def __init__(self, parent=None):
super(TestWindow, self).__init__(parent)
loader = QUiLoader()
file = QFile(abspath("ui/mainwindow.ui"))
file.open(QFile.ReadOnly)
self.window = loader.load(file, parent)
file.close()
self.window.show()
def resizeEvent(self, event):
print "resize"
app = QApplication(sys.argv)
test = TestWindow()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
.ui 文件可以在此处找到。
我想使用QFileDialog创建一个文件对话框,以选择要在QMediaPlayer中设置的音频文件,并使用文件扩展名掩码(*.mp3, *.ogg, *.flac)。不幸的是,它不起作用,因为它应该将最后一个扩展作为过滤器属性。
我已经尝试过 PyQt5 和 PySide2,结果是相同的。它在过滤器列表中显示具有最新扩展名的文件,例如仅 *.mp3 或 *.flac
audioFormats = "*.mp3, *.wav, *.ogg, *.wma, *.flac"
print(f"these are formats: {audioFormats}")
self.track, _ = self.getOpenFileName(parent=self, caption="Set track file", filter=f"Audio files ({audioFormats})")
Run Code Online (Sandbox Code Playgroud)
我预计它会显示具有所有这些扩展名的文件。
我刚刚开始学习 PyQT 并将其与 PySide2 一起使用。我了解按钮事件如何与绑定单击事件一起使用,但是,我有一个问题。
我的单击事件在启动时随机执行 - 也不明白 - 并且在执行后单击这些 QButton 不会调用绑定方法。
class StartWindow(QWidget):
def __init__(self):
super().__init__()
self.button_orginial = QPushButton('Show Original')
self.button_orginial.setStyleSheet("background-color: #4592af; color: black;")
self.button_prediction = QPushButton('Show Prediction')
self.button_prediction.setStyleSheet("background-color: #e3c4a8; color: black;")
self.horizontalLayout = QHBoxLayout()
self.verticalLayout = QVBoxLayout()
self.verticalLayout.addWidget(self.button_orginial)
self.verticalLayout.addWidget(self.button_prediction)
self.verticalLayout.addLayout(self.horizontalLayout)
self.button_prediction.clicked.connect(self.ShowPrediction())
self.button_orginial.clicked.connect(self.ShowOriginal())
self.InitWindow()
def InitWindow(self):
self.setWindowTitle("xxx")
self.setGeometry(500,500,940,360)
self.setLayout(self.verticalLayout)
def ShowPrediction(self):
self.predictImg = QLabel(self)
self.predictImg.setPixmap(self.genImage("prediction"))
self.horizontalLayout.addWidget(self.predictImg)
print("pred clicked")
def ShowOriginal(self):
self.showImage = QLabel(self)
self.showImage.setPixmap(self.genImage("original"))
self.horizontalLayout.addWidget(self.showImage)
print("org clicked")
if __name__ == '__main__':
app = QApplication([])
window = StartWindow()
window.setStyleSheet("background-color: black;") …Run Code Online (Sandbox Code Playgroud) 如何将 QML 文件作为单个可执行文件包含到我的 Python 项目中。当我运行时pyinstaller --onefile main.py,运行可执行文件会导致未找到 QML 文件的错误。除非我使用绝对路径或放置view.qml在与可执行文件相同的目录中。我不想有一个单独的 QML 文件,我希望它合并到可执行文件中。
主要.py:
if __name__ == "__main__":
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.load(QUrl("view.qml"))
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
视图.qml:
import QtQuick 2.0
ApplicationWindow {
id: window
title: "Window"
width: 900
height: 600
visible: true
}
Run Code Online (Sandbox Code Playgroud) 我不是一个经验丰富的程序员,我正在尝试使用 Qt for python (PySide2) 在 python 中创建一种数据记录器程序来构建 GUI。我能够使用 Designer 创建一个 gui 并将其加载到 python 中。GUI 目前只是一个空白窗口。然后我创建了一个函数,在显示图形的窗口中启动 MatplotLib,并使用 Qt 计时器在主程序的每个循环中更新数据。
一切都有效,但是 MatPlotLib 的重绘时间减慢了 gui 刷新速度。所以我尝试将 MatPlotLib 放入一个单独的线程中,经过大量试验后我明白它不能在单独的线程中运行。最后我决定尝试使用多处理。现在 MatPlotLib 在一个单独的进程中运行良好(我使用队列将数据发送到 MatPlotLib)并在进程完成后正确退出,但是当我关闭主窗口时,程序更新完全关闭,并且还键入 Ctrl+C 提示是被阻止。
这是我的代码:
#!/usr/bin/env python3
import sys
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QApplication, QWidget
from PySide2.QtCore import QFile, QTimer
import matplotlib.pyplot as plt
from multiprocessing import Process, Queue, freeze_support
import random
class DSL(QWidget):
def __init__(self):
# LOAD HMI
QWidget.__init__(self)
designer_file = QFile('userInterface.ui')
designer_file.open(QFile.ReadOnly)
loader = QUiLoader()
self.ui = loader.load(designer_file, …Run Code Online (Sandbox Code Playgroud) 代码片段的示例在这里:
from PySide2 import QtCore, QtGui, QtWidgets, QtWebChannel
from PySide2.QtWebEngineWidgets import QWebEngineView, QWebEngineSettings
class AppWindow(QtWidgets.QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.view = WebView(self)
self.setCentralWidget(self.view)
self.view.settings().setAttribute(QWebEngineSettings.JavascriptEnabled, True)
self.view.settings().setAttribute(QWebEngineSettings.PluginsEnabled, True);
self.page = self.view.page()
self.page.setDevToolsPage(self.page)
#self.inspector = QWebInspector(self) # Crash is here!!!
#self.inspector.setPage(self.page)
#self.inspector.hide()
Run Code Online (Sandbox Code Playgroud)
上面的三行在以前的版本中运行良好。
QWebInspectorPySide2的替代方案是什么?
我试图在每次调用日志处理程序发出函数时发送 Qt 信号。但我认为 MyLogHandler.emit 和 log.emit 函数是冲突的。
from PySide2.QtCore import QObject, Signal
import logging
class MyLogHandler(logging.Handler, QObject):
log = Signal(str)
def emit(self, record):
self.log.emit('send')
if __name__ == "__main__":
logging.getLogger().addHandler(MyLogHandler())
logging.warning('logging test')
Run Code Online (Sandbox Code Playgroud)
错误:
TypeError: emit() takes 2 positional arguments but 3 were given
Run Code Online (Sandbox Code Playgroud)
更新:
我尝试使用组合(根据@eyllanesc),但我仍然无法将信号连接到 QML 文件。我不知道为什么我无法在 QML 中接收信号。它似乎没有发射任何东西。我究竟做错了什么?
from functools import cached_property
import logging
import sys
from PySide2.QtGui import QGuiApplication
from PySide2.QtQml import QQmlApplicationEngine
from PySide2.QtCore import QCoreApplication, QObject, QTimer, Signal, QUrl
class Main(QObject):
log = Signal(str)
class Log(object):
def …Run Code Online (Sandbox Code Playgroud) 我有 PyQt5 QLabels 随着 QMainWindow 大小的变化而扩展/收缩。当 QMainWindow 的大小调整为其初始尺寸以外的任何值时,我想获取 QLabels 的尺寸。
下面的脚本在 QMainWindow 中创建两个 QLabel。QLabel 展开,但顶部 QLabel 具有固定高度。QMainWindow 的创建尺寸为 400x300,并显示为最大化屏幕showMaximized()(在我的例子中为 1920 x 1080)。该脚本在 QMainWindow 显示之前和之后打印 QLabels 的尺寸。在显示之前,width()返回height()默认的 QLabel 值,在显示之后(屏幕最大化)width()并height()返回值,就好像 QMainWindow 的物理尺寸为 400x300 一样。这是打印的 wat:
label_1 Size Before Expanding: 100 100
label_2 Size Before Expanding: 100 30
label_1 Size After Expanding: 378 100
label_2 Size After Expanding: 378 171
Run Code Online (Sandbox Code Playgroud)
当 QMainWindow 最大化时,如何获得 QLabels 的真实尺寸?我是在Windows环境下运行的。
from PyQt5.QtWidgets import QApplication, QMainWindow, QSizePolicy, QLabel, QVBoxLayout, …Run Code Online (Sandbox Code Playgroud) 我在 Maya / PySide2 / Python 2.7
我无法使用自定义表模型设置标题数据。
我试过这个:
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtCore import Qt
class TableModel(QtCore.QAbstractTableModel):
def __init__(self, data):
super(TableModel, self).__init__()
self.setHeaderData(0, Qt.Horizontal, "Driver")
self.setHeaderData(1, Qt.Horizontal, "Range")
self.setHeaderData(2, Qt.Horizontal, "Driven")
self.setHeaderData(3, Qt.Horizontal, "Range")
self._data = data
def data(self, index, role):
if role == Qt.DisplayRole:
return self._data[index.row()][index.column()]
def rowCount(self, index):
return len(self._data)
def columnCount(self, index):
return 4
def addRow(self, row):
self._data.append(row)
self.layoutChanged.emit()
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.table = QtWidgets.QTableView()
data = [
[
"firstData", …Run Code Online (Sandbox Code Playgroud) 我有两个按钮,并且都有一些悬停效果。第一个按钮也有一个菜单,问题是,当单击第一个按钮并出现菜单时,鼠标悬停在菜单关闭之前无法同时用于第二个按钮。
我不确定,但我相信这是由于某种原因focusPolicy,我试图找到解决方案,但我找不到。即使在显示菜单时,我只想在小部件的按钮上使悬停效果可用。
from PySide2 import QtWidgets, QtGui, QtCore
import sys
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super(MyWidget, self).__init__()
self.resize(300, 300)
layout = QtWidgets.QHBoxLayout(self)
btn = QtWidgets.QPushButton('Button 1')
btn.setStyleSheet('QPushButton::hover{background-color: gray;}')
layout.addWidget(btn)
menu = QtWidgets.QMenu(self)
action = QtWidgets.QAction('buttonAction', menu)
menu.addAction(action)
btn.setMenu(menu)
btn = QtWidgets.QPushButton('Button 2')
btn.setStyleSheet('QPushButton::hover{background-color: gray;}')
layout.addWidget(btn)
self.setLayout(layout)
app = QtWidgets.QApplication([])
wig = MyWidget()
wig.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
请注意,我什至尝试evenFilter更改Enter/Leave事件的颜色并返回True/`False 值,而不是样式表。
pyside2 ×11
python ×10
pyqt5 ×4
pyqt ×2
dimensions ×1
matplotlib ×1
maya ×1
pyinstaller ×1
pyside ×1
python-3.x ×1
qfiledialog ×1
qlabel ×1
qmediaplayer ×1
qml ×1
qt-designer ×1
qtableview ×1
qwidget ×1