python - 如何在 Pyqt5 .ui 文件中获取子菜单?
问题描述
我想得到子菜单 QuitProgram <- 这是子菜单的名称,但它在 UI 文件中。
如何在变量中设置它的操作以退出程序?
文件菜单对象名称是 'actionQuit_FromProgram' <- 这是一个子菜单。
蟒蛇文件:
from PyQt5 import QtWidgets, uic
from PyQt5.QtWidgets import QFileDialog, QMenuBar
from PyQt5.QtGui import *
import sys
import os
import qdarkgraystyle
path = os.path.abspath(os.getcwd())
import qrcode
class Ui(QtWidgets.QMainWindow):
def __init__(self):
super(Ui, self).__init__()
uic.loadUi('main.ui', self)
#self.show()
self.button = self.findChild(QtWidgets.QPushButton, 'qrgenerator')
self.button.clicked.connect(self.QrCodeGenerator) # Remember to pass the definition/method, not the return value!
self.input = self.findChild(QtWidgets.QLineEdit, 'qredit')
self.button1 = self.findChild(QtWidgets.QPushButton, 'qropen')
self.button1.clicked.connect(self.OpenQRCode)
self.menu1 = self.findChild(QMenuBar,'actionQuit_FromProgram')
print(self.menu1)
#self.menu1.triggered.connect(qApp.quit)
self.show()
def QrCodeGenerator(self):
# Generate QR code
self.url = qrcode.make(self.qredit.text())
if self.qredit.text() == '':
QMessageBox.warning(self, "Error", "Please Type In Something To Generate Qr Code")
else:
self.url.save("filename.png","PNG")
def OpenQRCode(self):
fname = QFileDialog.getOpenFileName(self, 'Open file',
path,"Image files (*.jpg *.gif *.png *.svg)")[0]
self.label_2.setPixmap(QPixmap(fname))
app = QtWidgets.QApplication(sys.argv)
app.setStyleSheet(qdarkgraystyle.load_stylesheet())
window = Ui()
app.exec_()
解决方案
如果您正在使用loadUi
(或者setupUi
如果您正在使用 pyuic 生成的文件),则对象检查器(列出 UI 上所有小部件的树视图)中的所有元素都将根据其对象名称作为实例属性使用。
因此,如果您的操作actionQuit_FromProgram
在检查器中被调用,您可以使用self.actionQuit_FromProgram
.
这也意味着:
- 所有这些
findChild
都是绝对没用的:您已经可以访问self.qrgenerator
,self.qredit
等; - 在任何情况下,
findChild
都应该与您正在寻找的对象的正确类一起使用:我真诚地怀疑这actionQuit_FromProgram
是一个 QMenuBar (所以, usingfindChild(QMenuBar, ...)
根本不起作用;如果它是一个动作,则使用findChild(QAction, ...)
;如果它是一个子菜单, 使用findChild(Qmenu, ...)
; - 每个 QMainWindow通常只有一个
self.menuBar()
菜单栏,使用;可以轻松访问它。
推荐阅读
- matlab - Octave:用 'textscan' 替换 'strread' - 抛出“错误:返回列表中未定义的元素号 4
- python - 将 Python 计算机视觉应用程序打包成可执行文件
- apache-spark - Pyspark删除数组的第一个元素
- javascript - 有没有办法返回谁删除了一条消息(Discord Bot Development)
- python-3.x - Dask - 在 map_partition 调用上返回一个 dask.dataframe
- r - 在 R 的嵌套数据框中查找重复值
- fifo - LRU 页面替换 vs FIFO 页面替换
- json - 翻译和开发人员之间的内部化、工作流程
- java - HashSet 计数比较 Java
- python - 如何在两个 Pandas 数据帧中找到元素调和平均值