я хочу создать ярлыки с последовательным номером в названии - PullRequest
0 голосов
/ 03 июля 2019

прежде всего: написано на Python3.6 с PyQt5.

Я хочу создавать ярлыки при каждом нажатии кнопки. Прямо сейчас я делаю это, ссылаясь на функцию при нажатии кнопки. Я хотел бы остаться таким. Моя проблема в том, что каждый раз, когда я нажимаю эту кнопку «add», одно и то же определение начинается с метки har и кнопок. Я хотел бы создавать разные ярлыки каждый раз, когда вызывается эта функция.

Я хотел бы сделать что-то вроде:

....

self.pushButton_2.clicked.connect(self.new_line)

def new_line(self, Form):
   self.label+str(i) = QtWidgets.QLabel()
   self.label_2.setObjectName("labeli")
   self.horizontalLayout.addWidget(self.labeli)
   i = i + 1

.....

но в этом случае я не работающая переменная, потому что она принадлежит слову labeli

class Ui_Form(object):






    def Table(self):
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui2Form()
        self.ui.setup2Ui(self.window)
        self.window.show()


    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(628, 196)
        self.verticalLayout = QtWidgets.QVBoxLayout(Form)
        self.verticalLayout.setObjectName("verticalLayout")
        self.label = QtWidgets.QLabel(Form)
        self.label.setObjectName("label")
        self.verticalLayout.addWidget(self.label)
        self.LCDAmount = QtWidgets.QLCDNumber(Form)
        self.LCDAmount.setObjectName("LCDAmount")
        #self.new_line(Form)
        self.Knopfe(Form)
        #neue Zeile einfügen



    def new_line(self, Form):
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label_2 = QtWidgets.QLabel()
        self.label_2.setObjectName("label_2")
        self.horizontalLayout.addWidget(self.label_2)
        spacerItem = QtWidgets.QSpacerItem(188, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem)
        self.pushButton = QtWidgets.QPushButton()
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout.addWidget(self.pushButton)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.label_2.setText('filename')
        self.pushButton.setText("Browse")
        self.dlt = QtWidgets.QPushButton()
        self.dlt.setObjectName("dlt")
        self.dlt.setMaximumSize(QtCore.QSize(70, 40))
        self.horizontalLayout.addWidget(self.dlt)
        self.dlt.setText("Delete")
        self.dlt.clicked.connect(self.label_2.close)
        self.dlt.clicked.connect(self.pushButton.close)
        self.dlt.clicked.connect(self.dlt.close)
        self.dlt.clicked.connect(self.LCDupdateM)
        self.pushButton.clicked.connect(self.openFileNamesDialog)








        # Dialogfeld öffnen
    def openFileNamesDialog(self):    
        fname = QFileDialog.getOpenFileName(None, "Datei öffnen", "C://", "XML only (*.xml)")

        if fname:
            f = str(fname)
            f_path, f_ext, f_desc = f.split('.')
            fsp = f_path.split('/')
            fileName = fsp[len(fsp)-1]

            filePath = f_path
            filePathArray = filePath.split("'")
            self.selectedFile = filePathArray[1] + '.xml'

            print(f)
            print(self.selectedFile)
            print(fileName)
            self.label_2.setText(fileName)

    def Knopfe(self, Form):
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.pushButton_2 = QtWidgets.QPushButton(Form)
        self.pushButton_2.setObjectName("pushButton_2")
        self.horizontalLayout_2.addWidget(self.pushButton_2)
        self.pushButton_3 = QtWidgets.QPushButton(Form)
        self.pushButton_3.setObjectName("pushButton_3")
        self.horizontalLayout_2.addWidget(self.pushButton_3)
        self.verticalLayout.addLayout(self.horizontalLayout_2)
        self.pushButton_2.clicked.connect(self.LCDupdate)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)
        self.pushButton_2.clicked.connect(self.new_line)
        self.pushButton_3.clicked.connect(self.Table)

    def LCDupdate(self,Form):
        n = self.LCDAmount.intValue()
        n=n+1
        self.LCDAmount.display(str(n))

    def LCDupdateM(self,Form):
        n = self.LCDAmount.intValue()
        n=n-1
        self.LCDAmount.display(str(n))




    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label.setText(_translate("Form", "                                            load your modules"))
        self.pushButton_2.setText(_translate("Form", "Add module"))
        self.pushButton_3.setText(_translate("Form", "Next"))






if __name__ == "__main__":
    #bttn_clicks = 0
    app = QtWidgets.QApplication(sys.argv)
    ex = Ui_Form()
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

Проблема сейчас в том, что у меня есть оптический рабочий Gui, но в def openFileNamesDialog Я ссылаюсь на эти созданные строки и метки, и сейчас только последняя строка обновляет метку из «filename» в действительно выбранный файл, потому что я больше не могу вызывать другие, потому что все они имеют одинаковые имена.

Я надеюсь, что смог объяснить свои проблемы и пожелания, и я был бы очень признателен, если бы кто-нибудь мне помог. Я благодарен за каждый полезный комментарий.

С наилучшими пожеланиями

1 Ответ

0 голосов
/ 03 июля 2019

Вероятно, самый простой способ подключить сигнал кнопки к правильной метке без перестройки программы - это добавить метку в качестве аргумента к openFileNamesDialog и в new_line подключить сигнал self.pushButton.clicked к объекту functools.partial. Таким образом, вам нужно всего лишь добавить from functools import partial вверху скрипта, определив openFileNamesDialog как

def openFileNamesDialog(self, label):
        ....
        label.setText(f)

и в new_line() заменить последнюю строку на

self.pushButton.clicked.connect(partial(self.openFileNamesDialog, self.label_2))
...