标签: pyside2

滑动 QStackedWidget 页面

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

python qstackedwidget pyside2

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

从 ui 文件加载的 PySide2 QMainWindow 不触发窗口事件

我正在从 .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 文件可以在此处找到。

python qt-designer pyside2

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

如何解决 QFileDialog 的过滤参数问题?

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

我预计它会显示具有所有这些扩展名的文件。

python qfiledialog qmediaplayer pyqt5 pyside2

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

PyQT 单击事件仅在启动时执行并且不再起作用

我刚刚开始学习 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)

python pyqt pyqt5 pyside2

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

PyInstaller 和 QML 文件

如何将 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)

python pyinstaller qml pyside2

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

PySide2 和 Matplotlib:如何使 MatPlotLib 在单独的进程中运行?..因为它不能在单独的线程中运行

我不是一个经验丰富的程序员,我正在尝试使用 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)

python matplotlib multiprocessing pyside2

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

Qt WebEngine 中 QWebInspector 的替代品是什么?

代码片段的示例在这里:

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的替代方案是什么?

python web-inspector python-3.x pyside2 qwebengineview

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

记录发出函数和 QT 发出信号之间的名称冲突

我试图在每次调用日志处理程序发出函数时发送 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)

python pyqt pyside pyqt5 pyside2

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

PyQt5:如何获取显示小部件的尺寸

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

dimensions qwidget qlabel pyqt5 pyside2

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

无法使用 QTableView/自定义表格模型设置标题数据

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

python maya qtableview pyside2

0
推荐指数
1
解决办法
3224
查看次数

如何在显示 QMenu 时将鼠标焦点转移回?

我有两个按钮,并且都有一些悬停效果。第一个按钮也有一个菜单,问题是,当单击第一个按钮并出现菜单时,鼠标悬停在菜单关闭之前无法同时用于第二个按钮。

我不确定,但我相信这是由于某种原因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 值,而不是样式表。

python pyside2

-1
推荐指数
1
解决办法
131
查看次数