如何解决如何在Pyqt5 .ui文件中获取子菜单?
我想获得退出程序的子菜单
如何在变量中将其设置为退出程序?
文件菜单对象名称为'actionQuit_FromProgram'
Python文件:
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
(如果使用的是pyuic,则使用的是setupUi
),则对象检查器(列出UI上所有小部件的树状视图)中的所有元素都将变为根据其object name可用作实例属性。
因此,如果您的操作在检查器中被称为actionQuit_FromProgram
,则可以使用self.actionQuit_FromProgram
直接访问它。
这也意味着:
- 所有这些
findChild
都是毫无用处的:您已经可以访问self.qrgenerator
,self.qredit
等; - 在任何情况下,
findChild
应该与您要查找的对象的正确类一起使用:我真诚地怀疑actionQuit_FromProgram
是QMenuBar(因此,使用findChild(QMenuBar,...)
根本不起作用;如果是操作,请使用findChild(QAction,...)
;如果是子菜单,请使用findChild(Qmenu,...)
; - 每个QMainWindow通常只有一个 菜单栏,可使用
self.menuBar()
; 轻松访问。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。