如何在Pyqt5.ui文件中获取子菜单?

2024-09-30 06:15:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想获得退出程序的子菜单<;-这是子菜单的名称,但它位于UI文件中

如何在变量中设置其退出程序的操作

文件菜单对象名称为“actionQuit\u 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_()

Tags: 文件pathfromimportselfuiosdef
1条回答
网友
1楼 · 发布于 2024-09-30 06:15:58

如果您使用的是loadUi(或者setupUi如果您使用的是pyuic生成的文件),则对象检查器(列出UI上所有小部件的树视图)中的所有元素都将根据其object name作为实例属性可用

因此,如果您的操作在检查器中被调用actionQuit_FromProgram,那么您可以使用self.actionQuit_FromProgram直接访问它

这也意味着:

  • 所有这些findChild都是毫无用处的:您已经可以访问self.qrgeneratorself.qredit等等
  • 在任何情况下,findChild都应该与您正在寻找的对象的正确类一起使用:我真诚地怀疑actionQuit_FromProgram是QMenuBar(因此,使用findChild(QMenuBar, ...)根本不起作用;如果它是一个动作,则使用findChild(QAction, ...);如果它是一个子菜单,则使用findChild(Qmenu, ...)
  • 每个qmain窗口通常只有一个菜单栏,可以使用^{}轻松访问

相关问题 更多 >

    热门问题