PyQt5: изменение настроек виджета из другого файла .py - PullRequest
0 голосов
/ 06 мая 2020

Я хотел бы получить доступ и изменить параметры моего MainWindow из другого файла .py, расположенного в той же папке. Вот мой основной файл:

# File name : main.py
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):

    def button_clicked(self) : # Change the label text
        self.label_rate.setText("OK")

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("Currencies Converter")
        MainWindow.setWindowTitle("Currencies Converter")
        MainWindow.resize(872, 412)
        MainWindow.setMinimumSize(QtCore.QSize(872, 412))
        MainWindow.setMaximumSize(QtCore.QSize(872, 412))

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        rate_font = QtGui.QFont()
        rate_font.setPointSize(50)

        self.validation_button = QtWidgets.QPushButton(self.centralwidget)
        self.validation_button.clicked.connect(self.button_clicked)
        self.validation_button.setText("CONVERT")
        self.validation_button.setGeometry(QtCore.QRect(660, 0, 201, 41))
        self.validation_button.setObjectName("validation_button")

        self.label_rate = QtWidgets.QLabel(self.centralwidget)
        self.label_rate.setFont(rate_font)
        self.label_rate.setText("3.1214")
        self.label_rate.setGeometry(QtCore.QRect(30, 170, 301, 121))
        self.label_rate.setAlignment(QtCore.Qt.AlignCenter)
        self.label_rate.setObjectName("label_rate")

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 872, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)

        QtCore.QMetaObject.connectSlotsByName(MainWindow)

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_())

В этом состоянии код работает, но я хотел бы поместить функцию button_clicked() (и все будущие) в файл .py, расположенный в той же папке. как main.py. Но я столкнулся с некоторыми проблемами с концепциями наследования PyQt5. Я пробовал это:

# File name : func.py
from PyQt5 import QtCore, QtGui, QtWidgets
from main import Ui_MainWindow

class Funcs(Ui_MainWindow) :
   def button_clicked(self) :
      self.label_rate.setText("OK")

И на main.py:

from PyQt5 import QtCore, QtGui, QtWidgets
from func import Funcs
...
...
...
self.validation_button.clicked.connect(Funcs.button_clicked)

Я пробовал несколько конфигураций, но все равно получаю это сообщение об ошибке:

ImportError: cannot import name 'Funcs' from 'func'

...