#python #object #user-interface #pyqt5 #qprogressbar
Вопрос:
Я вызываю main.ui из main.py, и когда я нажимаю btn_test
кнопку, я хочу изменить значение qprogressbar
через testfile.py.
Это main.ui:
.
И это main.py:
import os
import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
import testfile
def resource_path(relative_path):
base_path = getattr(sys, "_MEIPASS", os.path.dirname(os.path.abspath(__file__)))
return os.path.join(base_path, relative_path)
form = resource_path('main.ui')
form_class = uic.loadUiType(form)[0]
class WindowClass(QMainWindow, form_class):
def __init__(self):
super().__init__()
self.setupUi(self)
self.btn_test.clicked.connect(testfile.fnc_test)
def set_count(self):
print('Start')
self.progress_test.setValue(50)
print('End')
if __name__ == '__main__':
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()
И это testfile.py:
import main
def fnc_test():
print('test')
main.WindowClass().set_count()
Я ожидал fnc_test
, что функция testfile.py
будет выполнена, когда я нажму btn_test
.
И я думаю, что когда fnc_test
функция выполняется, set_count
функция WindowClass
of main.py выполняется, и значение qprogress
изменяется на 50, вот так:
.
Когда я бегу main.py, результат, как показано ниже:
test
Start
End
но индикатор выполнения не изменился.
Комментарии:
1.
main.WindowClass()
создает новый экземпляр , который будет немедленно собран как мусор. Вам нужно получить ссылку на главное окно, которое вы уже создали. Один из способов сделать это:from PyQt5.QtWidgets import qApp; for widget in qApp.topLevelWidgets(): if isinstance(widget, main.WindowClass): widget.set_count(); break
.