PyQt5 Python在单击现有菜单选项时生成新按钮
这是我第一次在网站上发帖。对于我来说,学习Python和PyQt5还为时过早,所以我可能缺少一些基本的东西。我正在做一个程序,将有一些基本的功能,但现在我只想让按钮产卵工作 以下是我目前掌握的代码:PyQt5 Python在单击现有菜单选项时生成新按钮,python,pyqt5,Python,Pyqt5,这是我第一次在网站上发帖。对于我来说,学习Python和PyQt5还为时过早,所以我可能缺少一些基本的东西。我正在做一个程序,将有一些基本的功能,但现在我只想让按钮产卵工作 以下是我目前掌握的代码: from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import QFileDialog, QPushButton from PyQt5.QtGui import QIcon from PyQt5.QtCore import
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog, QPushButton
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot
import sys
import os
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(808, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.alltabswidget = QtWidgets.QTabWidget(self.centralwidget)
self.alltabswidget.setMinimumSize(QtCore.QSize(790, 541))
self.alltabswidget.setMaximumSize(QtCore.QSize(791, 561))
self.alltabswidget.setObjectName("alltabswidget")
self.gaming = QtWidgets.QWidget()
self.gaming.setObjectName("gaming")
self.label = QtWidgets.QLabel(self.gaming)
self.label.setGeometry(QtCore.QRect(6, 2, 781, 511))
self.label.setText("")
self.label.setPixmap(QtGui.QPixmap("../../../../../Pictures/Coding Images/Coding.jpg"))
self.label.setScaledContents(True)
self.label.setObjectName("label")
self.firstcodingbutton = QtWidgets.QPushButton(self.gaming)
self.firstcodingbutton.setGeometry(QtCore.QRect(50, 30, 141, 51))
self.firstcodingbutton.setObjectName("firstcodingbutton")
self.alltabswidget.addTab(self.gaming, "")
self.gaming1 = QtWidgets.QWidget()
self.gaming1.setObjectName("gaming1")
self.label_2 = QtWidgets.QLabel(self.gaming1)
self.label_2.setGeometry(QtCore.QRect(6, 2, 781, 511))
self.label_2.setText("")
self.label_2.setPixmap(QtGui.QPixmap("../../../../../Pictures/Coding Images/Gaming.jpg"))
self.label_2.setScaledContents(True)
self.label_2.setObjectName("label_2")
self.firstgamingbutton = QtWidgets.QPushButton(self.gaming1)
self.firstgamingbutton.setGeometry(QtCore.QRect(50, 30, 141, 51))
self.firstgamingbutton.setObjectName("firstgamingbutton")
self.alltabswidget.addTab(self.gaming1, "")
self.fileaccess = QtWidgets.QWidget()
self.fileaccess.setObjectName("fileaccess")
self.label_3 = QtWidgets.QLabel(self.fileaccess)
self.label_3.setGeometry(QtCore.QRect(6, 2, 781, 511))
self.label_3.setText("")
self.label_3.setPixmap(QtGui.QPixmap("../../../../../Pictures/Coding Images/Other.jpg"))
self.label_3.setScaledContents(True)
self.label_3.setObjectName("label_3")
self.firstfileacessbutton = QtWidgets.QPushButton(self.fileaccess)
self.firstfileacessbutton.setGeometry(QtCore.QRect(50, 30, 141, 51))
self.firstfileacessbutton.setObjectName("firstfileacessbutton")
self.alltabswidget.addTab(self.fileaccess, "")
self.gridLayout.addWidget(self.alltabswidget, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 808, 21))
self.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.actionnewshortcut = QtWidgets.QAction(MainWindow)
self.actionnewshortcut.setObjectName("actionnewshortcut")
## self.actionnewshortcut.triggered.connect(clicknewshortcut)
self.actionsave = QtWidgets.QAction(MainWindow)
self.actionsave.setObjectName("actionsave")
self.actionexit = QtWidgets.QAction(MainWindow)
self.actionexit.setObjectName("actionexit")
self.menuFile.addAction(self.actionnewshortcut)
self.menuFile.addAction(self.actionsave)
self.menuFile.addAction(self.actionexit)
self.menubar.addAction(self.menuFile.menuAction())
self.retranslateUi(MainWindow)
self.alltabswidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Shortcuts"))
self.firstcodingbutton.setText(_translate("MainWindow", "Rename Me"))
self.alltabswidget.setTabText(self.alltabswidget.indexOf(self.gaming), _translate("MainWindow", "Coding"))
self.firstgamingbutton.setText(_translate("MainWindow", "Rename Me"))
self.alltabswidget.setTabText(self.alltabswidget.indexOf(self.gaming1), _translate("MainWindow", "Gaming"))
self.firstfileacessbutton.setText(_translate("MainWindow", "Rename Me"))
self.alltabswidget.setTabText(self.alltabswidget.indexOf(self.fileaccess), _translate("MainWindow", "File Access"))
self.menuFile.setTitle(_translate("MainWindow", "File"))
self.actionnewshortcut.setText(_translate("MainWindow", "New Shortcut"))
self.actionnewshortcut.setShortcut(_translate("MainWindow", "Ctrl+N"))
self.actionsave.setText(_translate("MainWindow", "Save"))
self.actionsave.setShortcut(_translate("MainWindow", "Ctrl+S"))
self.actionexit.setText(_translate("MainWindow", "Exit"))
self.actionexit.setShortcut(_translate("MainWindow", "Ctrl+E"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
我确实在网站上找到了,但是在那个例子中,主窗口的设置有点不同,我不知道如何将按钮生成函数插入到我的代码中。基本上我想让它这样,当你去文件,然后新的快捷方式,它会生成一个按钮,就在下面的第一个在当前选定的选项卡。我可以在之后搞乱几何学,但首先我要让这一代人开始工作。我已经注释掉了触发信号,因为它还没有链接到任何东西。将
self
添加到插槽中
self.actionnewshortcut.triggered.connect(self.clicknewshortcut)
在类中定义方法
def clicknewshortcut(self):
tab = self.alltabswidget.currentWidget()
first_btn = tab.findChild(QPushButton)
btn = QPushButton('New Button', tab)
btn.setGeometry(first_btn.geometry().translated(0, first_btn.height()))
btn.show()
它获取当前窗口小部件,创建一个新按钮,并将其几何图形设置在该窗口小部件中的第一个按钮下方。窗口的设置不同,您遇到了困难,因为您试图修改pyuic生成的文件,这是不应该做的事情。要正确使用这些文件(您现在应该再次生成),请遵循有关的官方指导原则。我不确定您在这篇评论中的意思。我知道你应该在PUIC5中完成你的ui设计,而且(我相信)在将它转换成.py文件之前,我已经在那里做了尽可能多的工作。到目前为止,我在帖子中所写和分享的内容都能正常工作(访问3个选项卡背景的图像文件)。我没有试图编辑这些文件的内容,我只是试图在单击“文件”菜单中的某个选项时生成按钮。我让其他人用一个函数来响应,希望它能解决问题,我会在测试后更新。我不是说它不工作,而是说你不应该这样做。决不能修改pyuic生成的文件;其中一个最重要的原因是,在某个时候,您可能需要修改UI,然后使用pyuic再次生成py文件,这使得您很难与目前编写的现有代码集成。这些文件应该导入到另一个“主”脚本中,该脚本将包含程序的“逻辑”。这样,您最终将能够轻松地修改UI,剩下的唯一事情就是再次生成文件。但由于我是新来的,我不知道如何将逻辑与PyQT设计器输出的.py文件分开来构造,我将不得不进行更多的阅读。