问题标签 [pyqt6]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 我想根据 QMenu 中的选中操作更改每次按下按钮时播放的声音
我有一个QMainWindow
, 里面有一个QMenu
,QLineEdit
和一个QPushButton
。
每次单击该按钮时,它都会播放声音,然后将文本添加到 QLineEdit。在我的 QMenu 中,用户必须能够通过检查来选择播放的声音。
我试图通过self.s
在每次检查 QAction 时更改 MainWindow 类中的变量来实现这一点,同时,其他 QAction 未选中。所以在我的playsound()
我只是把self.view.s
作为论点。
但是好像只是在读原著self.view.s
,也就是第一声。我的改变信号self.view.s
不起作用。此外,其他 QAction 并没有像我希望的那样取消选中。
下面是我的代码:
我希望能够playsound()
根据在菜单栏中选中的 QAction 来更改值。在选中一个 QAction 时,应取消选中其他 QAction。
python - 自定义 paintEvent() 不会以某种大小填充整个小部件背景
我有一个 QWidget,我已将其设置为具有透明背景,并通过 paintEvent() 绘制了背景。
我已经向这个添加了子小部件,并且在渲染时似乎自定义paintEvent()无法绘制完整的背景,或者子小部件以某种方式覆盖它并阻止成功渲染。
通过 uic.loadUi('path.ui', self) 添加子小部件
示例代码:
python - mmdevice 音频输出错误:无法初始化 COM(错误 0x80010106)
我正在尝试使用 Pafy、vlc 和 PyQt6 制作音频播放器。当我运行下面的代码时,它运行良好。
但是,当我将它重写为一个类并从我的 PyQt6 代码中调用时,我收到了错误消息:
这是我的 GUI 代码:
这是 play_song 类:
经过一番尝试,我发现错误来自这两行
我在谷歌上搜索了一段时间,但仍然找不到解决方案。我在这里看到了同样的问题 ,但没有人回答。有谁知道如何修理它?
python - PyQt6删除带有嵌套类的自定义小部件导致程序崩溃
我正在使用 Python 3.9.5。
我在我的项目中遇到了一些严重的问题,这里是一个最小可重现的示例代码,以及一些描述。
问题很简单,如果我单击添加按钮,小部件将被添加并且一切正常,如果我双击 QTextEdit,它的应用按钮将显示并且它将从只读变为可编辑。
单击应用按钮后,该按钮将隐藏,相应的 QTextEdit 将再次只读。
我终于设法向 QTextEdit 添加了一个 doubleClicked 信号。
而且,问题是,如果我单击删除按钮,而不是按预期删除内容,它会使整个应用程序崩溃。
很抱歉,最小可重现的例子太长了,但我只设法用所有代码重现了这个问题,我真的不知道出了什么问题。
那么如何解决呢?
python - 在 macOS 11.4 上运行 python 3.9 Cython p2app PyQt6 Hello World 时出错
我正在使用 python 3.9 在 Cython 和 py2app 中编译一个简单的 Qt6“Hello World”应用程序。它在 CPython 3.9 下运行良好。它可以正确编译,但无法在 Cython 中运行。
以下是项目文件:
测试负载.pyx:
主要.py:
和setup.py:
当我运行程序时,我在控制台上收到此错误:
任何想法 ?
python - PyQt6 自动调整 QTextEdit 大小以适应内容问题
我在 QScrollArea 的 QVBoxLayout 中有一堆 QTextEdits。
文本通常会变得很长,并且水平空间受设计限制,而 QTextEdit 会自动将文本换成多行,这很好。
我想自动调整 QTextEdit 的大小以适合换行的文本,文本本身将始终在一行中,并且换行的文本可以有多行,我希望 QTextEdits 适合换行的高度。
经过数小时的谷歌搜索,我找到了一个解决方案,但它没有按预期工作,有时底部可能会多出一行,我将在下面发布示例代码:
请注意,您需要 Noto Serif 才能正确运行(当然您可以替换它),当然您还需要 PyQt6。
在示例中,前七个文本框的底部都有一个额外的空行,而后三个则没有。
是什么导致了多余的线以及如何删除它?
更新:
我必须设置 Qt.WidgetAttribute.WA_DontShowOnScreen 因为如果我不设置它,调用 QTextEdit 的 .show() 会导致 QTextEdit 出现在屏幕中间并迅速消失,这很烦人。
我必须调用 .show() 因为在没有 show() 的情况下调用 document().size(),值将全部为 0,我不知道为什么会这样。
python - PyQt6 如何动态调整 QGroupBox 的大小以适应内容?
我正在使用 Python 3.9.5 和 PyQt6。
在我之前的问题之后,我想问一下如何动态调整 QGroupBox 的大小以适应其内容。
我有一个QScrollArea,它的布局是一个QVBoxLayout,会在QVBoxLayout中加入一堆QGroupBox。
QGroupBox本身有一个QVBoxLayout,QVBoxLayout里面是一堆QVBoxLayout,QGroupBox的QVBoxLayout里面是QVBoxLayout里面的内容。
每个最低级别的 QVBoxLayout 都有两个小部件和一个 QHBoxLayout。
从上到下,第一个小部件是一个 QLabel,它是固定大小的 100x20,第二个小部件是一个 QTextEdit,它可以自动调整大小。QHBoxLayout 内部是一个大小为 60x20 的拉伸和固定大小的按钮,该按钮可以隐藏或显示。
小部件和布局的层次结构是这样的:
我希望 QGroupBoxs 自动调整大小以适应其内容。
宽度由布局决定,我希望 QGroupBoxs 具有基于其内容的固定、最小、最佳高度。
基本上,高度应该是其所有 VISIBLE 小部件的高度之和,加上上边距和下边距,以及小部件之间的边距,也许还有复选框的高度。
我想为 QGroupBoxs 设置固定高度,因为如果我不这样做,布局将拉伸 QGroupBoxs 并将其定位在中间,而不是在顶部的最小高度,这不是我想要的。
我将在下面发布示例代码:
您可以看到 QGroupBoxs 没有处于最佳高度,如果双击 QTextEdits 并出现 Apply 按钮,则 groupbox 的顶部会变大,复选框处于尴尬的位置,当 QTextBoxs 调整为更少的行时,底部边框将变得不可见。
并且布局的边距始终为零,QGroupBox 的打印边距与观察到的边距不匹配,QGroupBox 的 childrenRects 高度始终为零,QGroupBox 的 contentsRects 高度始终为 478,这不如果我只.isHidden()
将.isVisible()
小部件添加到布局中而不调用其.show()
.
但是当我将它们添加到布局中时,它们总是自动可见的,除非我明确地制作它们.hide()
。除非已设置,否则调用.show()
将使已经可见的小部件在屏幕中央闪烁。Qt.WidgetAttribute.WA_DontShowOnScreen
那么我如何才能动态地计算出最佳的最小高度呢?
而且我不能使用.addStretch()
,因为我需要 QGroupBox 之间的最小、最佳间距,并且我需要通过使用索引使内容可删除,.addStretch()
这会破坏索引排序,因为在删除项目时不会删除拉伸。
python - PyQt6:在高度缩小后重绘QTextEdit的底部边框?
我有一类从 QTextEdit 子类化的文本框,它会自动调整其内容的大小,并且在调整窗口大小时也会调整大小。
文本可以很长,并且文本框会自动换行文本,因此当水平空间增加时,文本框的高度会缩小,因为换行较少。
问题是当文本框缩小时,它们的底部边框将丢失,除非窗口的宽度缩小,否则它们将只有左、上和右边框。
最小的,可重现的例子:
当您单击最大化按钮时,文本框从三个换行变为一行,并且在您恢复窗口之前,底部边框将丢失。
我想重新绘制边框,我已经谷歌搜索了 8 个多小时但找不到解决方案,我尝试添加以下autoResize
功能无济于事:
如何才能做到这一点?
python - 从一个类到另一个类的 QSpinBox 获取价值
我用 qt 设计器设计了一个 ui,我在一个类中有一个 QSpinBox,我需要从另一个类中获取它的值,但是<function class.fun at 0x0000028549B1DEE0>
当我打印它时我得到了它。当我尝试在同一个班级打印时,它可以工作,请帮忙
代码:
python - 如果单击一组复选框中的任何一个,PyQt6如何触发动作?
我在 QGroupBox 内的 QVBoxLayout 内的 QGridLayout 内有九个 QCheckBox,并且我在 QGroupBox 中定义了一个函数,用于更新 QVBoxLayout 内的 QScrollArea,并且我希望在任何一组复选框被单击时执行该函数。
如何完成上述任务?我只知道.stateChanged
和.clicked
信号,我必须创建九个连接吗?
这是示例代码:
如何在单击任何复选框时使函数运行,并消除 for 循环的需要,使函数自动知道单击了哪个复选框?
我已经尝试过@pyqtSlot(QCheckBox)
,def onItemClicked(self, item)
但无济于事。
我已经用谷歌搜索过这个,而且谷歌从来没有找到你真正想要的任何东西。