Динамическое изменение текста в QLabel
Написан код, который стягивает информацию через json
. Код работает.
Что нужно стягивать тянет, что нужно считать считает.
Создан интерфейс приложения через QT Designer. В нем расположил Labels
условно 1, 2, 3, ... .
Необходимо после стягивания информации через json
размещать её в соответствующие Labels
.
Просмотрел видео уроки пробовал разные варианты, но безуспешно.
Подозреваю, что есть структурное непонимание проблемы.
interface.py:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
MainWindow.setSizePolicy(sizePolicy)
MainWindow.setMinimumSize(QtCore.QSize(800, 600))
MainWindow.setMaximumSize(QtCore.QSize(800, 600))
MainWindow.setMouseTracking(False)
MainWindow.setAutoFillBackground(False)
self.centralwidget = QtWidgets.QWidget(MainWindow)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth())
self.centralwidget.setSizePolicy(sizePolicy)
self.centralwidget.setObjectName("centralwidget")
self.simple_asteroid = QtWidgets.QLabel(self.centralwidget)
self.simple_asteroid.setGeometry(QtCore.QRect(10, 10, 300, 20))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.simple_asteroid.setFont(font)
self.simple_asteroid.setLayoutDirection(QtCore.Qt.RightToLeft)
self.simple_asteroid.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.simple_asteroid.setObjectName("simple_asteroid")
self.simple_asteroid_base_price = QtWidgets.QLabel(self.centralwidget)
self.simple_asteroid_base_price.setGeometry(QtCore.QRect(320, 10, 100, 20))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.simple_asteroid_base_price.setFont(font)
self.simple_asteroid_base_price.setLayoutDirection(QtCore.Qt.LeftToRight)
self.simple_asteroid_base_price.setObjectName("simple_asteroid_base_price")
self.variegated_asteroid = QtWidgets.QLabel(self.centralwidget)
self.variegated_asteroid.setGeometry(QtCore.QRect(10, 30, 300, 20))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.variegated_asteroid.setFont(font)
self.variegated_asteroid.setLayoutDirection(QtCore.Qt.RightToLeft)
self.variegated_asteroid.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.variegated_asteroid.setObjectName("variegated_asteroid")
self.complex_asteroid = QtWidgets.QLabel(self.centralwidget)
self.complex_asteroid.setGeometry(QtCore.QRect(10, 50, 300, 20))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.complex_asteroid.setFont(font)
self.complex_asteroid.setLayoutDirection(QtCore.Qt.RightToLeft)
self.complex_asteroid.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.complex_asteroid.setObjectName("complex_asteroid")
self.mercoxit_asteroid = QtWidgets.QLabel(self.centralwidget)
self.mercoxit_asteroid.setGeometry(QtCore.QRect(10, 70, 300, 20))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.mercoxit_asteroid.setFont(font)
self.mercoxit_asteroid.setLayoutDirection(QtCore.Qt.RightToLeft)
self.mercoxit_asteroid.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.mercoxit_asteroid.setObjectName("mercoxit_asteroid")
self.ubiquitous_moon = QtWidgets.QLabel(self.centralwidget)
self.ubiquitous_moon.setGeometry(QtCore.QRect(10, 90, 300, 20))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.ubiquitous_moon.setFont(font)
self.ubiquitous_moon.setLayoutDirection(QtCore.Qt.RightToLeft)
self.ubiquitous_moon.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.ubiquitous_moon.setObjectName("ubiquitous_moon")
self.rare_moon = QtWidgets.QLabel(self.centralwidget)
self.rare_moon.setGeometry(QtCore.QRect(10, 110, 300, 20))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.rare_moon.setFont(font)
self.rare_moon.setLayoutDirection(QtCore.Qt.RightToLeft)
self.rare_moon.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.rare_moon.setObjectName("rare_moon")
self.variegated_asteroid_base_price = QtWidgets.QLabel(self.centralwidget)
self.variegated_asteroid_base_price.setGeometry(QtCore.QRect(320, 30, 100, 20))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.variegated_asteroid_base_price.setFont(font)
self.variegated_asteroid_base_price.setLayoutDirection(QtCore.Qt.LeftToRight)
self.variegated_asteroid_base_price.setObjectName("variegated_asteroid_base_price")
self.complex_asteroid_base_price = QtWidgets.QLabel(self.centralwidget)
self.complex_asteroid_base_price.setGeometry(QtCore.QRect(320, 50, 100, 20))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.complex_asteroid_base_price.setFont(font)
self.complex_asteroid_base_price.setLayoutDirection(QtCore.Qt.LeftToRight)
self.complex_asteroid_base_price.setObjectName("complex_asteroid_base_price")
self.mercoxit_asteroid_base_price = QtWidgets.QLabel(self.centralwidget)
self.mercoxit_asteroid_base_price.setGeometry(QtCore.QRect(320, 70, 100, 20))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.mercoxit_asteroid_base_price.setFont(font)
self.mercoxit_asteroid_base_price.setLayoutDirection(QtCore.Qt.LeftToRight)
self.mercoxit_asteroid_base_price.setObjectName("mercoxit_asteroid_base_price")
self.ubiquitous_moon_base_price = QtWidgets.QLabel(self.centralwidget)
self.ubiquitous_moon_base_price.setGeometry(QtCore.QRect(320, 90, 100, 20))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.ubiquitous_moon_base_price.setFont(font)
self.ubiquitous_moon_base_price.setLayoutDirection(QtCore.Qt.LeftToRight)
self.ubiquitous_moon_base_price.setObjectName("ubiquitous_moon_base_price")
self.rare_moon_base_price = QtWidgets.QLabel(self.centralwidget)
self.rare_moon_base_price.setGeometry(QtCore.QRect(320, 110, 100, 20))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.rare_moon_base_price.setFont(font)
self.rare_moon_base_price.setLayoutDirection(QtCore.Qt.LeftToRight)
self.rare_moon_base_price.setObjectName("rare_moon_base_price")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.simple_asteroid.setText(_translate("MainWindow", "Simple Asteroid Mining Cryslal Type B II"))
self.simple_asteroid_base_price.setText(_translate("MainWindow", "0"))
self.variegated_asteroid.setText(_translate("MainWindow", "Variegated Asteroid Mining Crystal Type B II"))
self.complex_asteroid.setText(_translate("MainWindow", "Complex Asteroid Mining Crystal Type B II"))
self.mercoxit_asteroid.setText(_translate("MainWindow", "Mercoxit Asteroid Mining Crystal Type B II"))
self.ubiquitous_moon.setText(_translate("MainWindow", "Ubiquitous Moon Mining Crystal Type B II"))
self.rare_moon.setText(_translate("MainWindow", "Rare Moon Mining Crystal Type B II"))
self.variegated_asteroid_base_price.setText(_translate("MainWindow", "0"))
self.complex_asteroid_base_price.setText(_translate("MainWindow", "0"))
self.mercoxit_asteroid_base_price.setText(_translate("MainWindow", "0"))
self.ubiquitous_moon_base_price.setText(_translate("MainWindow", "0"))
self.rare_moon_base_price.setText(_translate("MainWindow", "0"))
main.py:
import sys
from PyQt5 import QtWidgets
import interface
import requests
import json
class ExampleApp(QtWidgets.QMainWindow, interface.Ui_MainWindow):
def __init__(self):
# Это здесь нужно для доступа к переменным, методам
# и т.д. в файле interface.py
super().__init__()
self.setupUi(self) # Это нужно для инициализации нашего дизайна
def main():
app = QtWidgets.QApplication(sys.argv) # Новый экземпляр QApplication
window = ExampleApp() # Создаём объект класса ExampleApp
window.show() # Показываем окно
app.exec_() # и запускаем приложение
def item_price_sell (string_items):
response_jita = requests.get(f"https://api.evemarketer.com/ec/marketstat/json?typeid={string_items}&usesystem=30000142")
response_jita_json = json.loads(response_jita.text)
for item in response_jita_json:
#Квадратными скобками перемещаемся по списку через идентификаторы
price = (item['sell']['min'])
return price
def item_price_buy (string_items):
response_jita = requests.get(f"https://api.evemarketer.com/ec/marketstat/json?typeid={string_items}&usesystem=30000142")
response_jita_json = json.loads(response_jita.text)
for item in response_jita_json:
#Квадратными скобками перемещаемся по списку через идентификаторы
price = (item['buy']['max'])
return price
def res(n):
research_price = ((item_price_sell('20411') * n + item_price_sell('20413') * n + item_price_sell('34205'))/0.489)*0.1
return research_price
if __name__ == '__main__': # Если мы запускаем файл напрямую, а не импортируем
main() # то запускаем функцию main()
#self.simple_asteroid_base_price.config()
crystal_type_b = item_price_sell('38')*113
crystal_type_b_ii = crystal_type_b + res(4) + item_price_sell('11483') + item_price_sell('16682')*10
income = item_price_buy('60283') - crystal_type_b_ii
print('Simple Asteroid Mining Cryslal Type B II - ', round(income,0), '/', round(crystal_type_b_ii))
crystal_moon_type_b = item_price_sell('38')*500
crystal_moon_type_b_ii = crystal_moon_type_b + res(4) + item_price_sell('11483') + item_price_sell('16682')*34
income = item_price_buy('61199') - crystal_moon_type_b_ii
print('Ubiquitous Moon Mining Crystal Type B II - ', round(income,0), '/', round(crystal_moon_type_b_ii))
crystal_complex_type_b = item_price_sell('38')*563
crystal_complex_type_b_ii = crystal_complex_type_b + res(8) + item_price_sell('11483') + item_price_sell('16682')*38
income = item_price_buy('60301') - crystal_complex_type_b_ii
print('Complex Asteroid Mining Crystal Type B II - ', round(income,0), '/', round(crystal_complex_type_b_ii))
crystal_var_type_b = item_price_sell('38')*450
crystal_var_type_b_ii = crystal_var_type_b + res(6) + item_price_sell('11483') + item_price_sell('16682')*29
income = item_price_buy('60295') - crystal_var_type_b_ii
print('Variegated Asteroid Mining Crystal Type B II - ', round(income,0), '/', round(crystal_var_type_b_ii))
crystal_merc_type_b = item_price_sell('38')*1114
crystal_merc_type_b_ii = crystal_merc_type_b + res(10) + item_price_sell('11483') + item_price_sell('16682')*48
income = item_price_buy('60311') - crystal_merc_type_b_ii
print('Mercoxit Asteroid Mining Crystal Type B II - ', round(income,0), '/', round(crystal_merc_type_b_ii))
crystal_moon_r_type_b = item_price_sell('38')*589
crystal_moon_r_type_b_ii = crystal_moon_r_type_b + res(8) + item_price_sell('11483') + item_price_sell('16682')*37
income = item_price_buy('61211') - crystal_moon_r_type_b_ii
print('Rare Moon Mining Crystal Type B II - ', round(income,0), '/', round(crystal_moon_r_type_b_ii))
В файле интерфейса этой строкой присваивается текст полю:
self.simple_asteroid_base_price.setText(_translate("MainWindow", "0"))
При запуске открывается окно, а тело начинает расчеты только после закрытия окна. Соответственно нужно изменить код, так что бы расчеты производились при активном окне.
Где можно прочитать подробную информацию по правильной разработке структуры программы.
Понимаю, что это изначально фундаментальные знания. И соответственно нужно изменить поле Label на результат расчетов. Какой командой это будет исполняться?