pyqt5. Почему в втором окне ничего не выводится?
За pyqt я сел недавно и всех тонкостей не знаю. ниже приведен код моего интерфейса.
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import QMainWindow, QApplication, QLabel, QWidget, QPushButton
from PyQt5.QtGui import QPixmap, QIcon
import sys
class Window1(QWidget):
def __init__(self):
super(Window1, self).__init__()
self.setWindowTitle('Window1')
self.setMinimumWidth(200)
self.setMinimumHeight(50)
self.button = QPushButton(self)
self.button.setText('Ok')
self.button.show()
class Window2(QWidget):
def __init__(self):
super(Window2, self).__init__()
self.setWindowTitle('HI Helper Beta 0.1')
self.setGeometry(300, 300, 700, 360)
self.setWindowIcon(QIcon('log.png'))
def load_image1(self, file_name, z1, z2, z3, z4):
pixmap = QPixmap(file_name)
pixmap = pixmap.scaled(250,250)
self.label = QLabel(self)
self.label.setPixmap(pixmap)
self.label.setGeometry(z1, z2, z3, z4)
self.label.resize(200, 350)
self.label.setStyleSheet("""
QLabel {
padding: 4px;
border: 4px solid black;
background-color: #ffffff;
}
""")
def load_image(self, file_name, z1, z2, z3, z4):
pixmap = QPixmap(file_name)
self.label = QLabel(self)
self.label.setPixmap(pixmap)
self.label.setGeometry(z1, z2, z3, z4)
def set_label(self,text, z1, z2, z3, z4):
self.label1 = QLabel(self)
self.label1.setGeometry(z1, z2, z3, z4)
self.label1.setText(text)
self.label1.setStyleSheet("""
QLabel {
padding: 4px;
border: 2px solid black;
background-color: #ffffff;
}
""")
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setWindowTitle('MainWindow')
def show_window_1(self):
self.w1 = Window1()
self.w1.button.clicked.connect(self.show_window_2)
self.w1.button.clicked.connect(self.w1.close)
self.w1.show()
def show_window_2(self):
self.w2 = Window2()
self.w2.show()
А вот моя основная программа. test1 - интерфейс, код приведен выше
import pandas as pd
from test1 import *
data=pd.read_excel('Valkyries.xlsx')
def get_data( data, filter_data):
for i in filter_data:
data=data[ (data[i[0]]==i[1]) ]
return data
nameee = 'PSY'
typee = 'Physical'
filt=[['bs type',nameee],['damage type',typee]]
masss = (get_data(data,filt))
print(masss.iloc[:3,:])
name1 = masss['character'].iloc[0]
name2 = masss['character'].iloc[1]
name3 = masss['character'].iloc[2]
BSname1 = masss['battlesuit'].iloc[0]
BSname2 = masss['battlesuit'].iloc[1]
BSname3 = masss['battlesuit'].iloc[2]
char1 = 'D:\expsys\images\%s\%s' % (name1, BSname1)
char2 = 'D:\expsys\images\%s\%s' % (name2, BSname2)
char3 = 'D:\expsys\images\%s\%s' % (name3, BSname3)
type1 = 'D:\expsys\%s' % masss['bs type'].iloc[0]
type2 = 'D:\expsys\%s' % masss['bs type'].iloc[1]
type3 = 'D:\expsys\%s' % masss['bs type'].iloc[2]
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
ex = Window2()
w = MainWindow()
ex.load_image1(char1, 0, 0, 0, 0)
ex.load_image1(char2, 250, 0, 0, 0)
ex.load_image1(char3, 500, 0, 0, 0)
ex.set_label(name1, 50, 300, 150, 30)
ex.set_label(name2, 300, 300, 150, 30)
ex.set_label(name3, 550, 300, 150, 30)
ex.set_label(BSname1, 50, 328, 150, 30)
ex.set_label(BSname2, 300, 328, 150, 30)
ex.set_label(BSname3, 550, 328, 150, 30)
ex.load_image(type1, 10, 310, 150, 30)
ex.load_image(type2, 260, 310, 150, 30)
ex.load_image(type3, 510, 310, 150, 30)
ex.show()
w.show_window_1()
sys.exit(app.exec_())
моя проблема заключается в том, что когда я открываю окно2 через окно1 оно пустое, а если я напрямую открываю окон2 оно заполнено.
Моя программа должна будет получать параметры через окно1 и по нажатию кнопки выдавать результат в окне2. Параметры в самой проге заданы, но результата нет.
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Я не могу проверить работу вашего приложения, потому что не имею данных, которыми вы оперируете. Но виртуально попробовал запустить ваше приложение и в моих мыслях это получилось так, пробуйте:
main.py
import sys
import pandas as pd
from PyQt5.Qt import *
from test1 import Window1, Window2 # !!!
data = pd.read_excel('Valkyries.xlsx')
def get_data( data, filter_data):
for i in filter_data:
data = data[ (data[i[0]]==i[1]) ]
return data
nameee = 'PSY'
typee = 'Physical'
filt = [['bs type',nameee],['damage type',typee]]
masss = (get_data(data, filt))
print(masss.iloc[:3,:])
class MainWindow(QMainWindow):
def __init__(self, masss):
super(MainWindow, self).__init__()
self.setWindowTitle('MainWindow')
self.masss = masss
name1 = masss['character'].iloc[0]
name2 = masss['character'].iloc[1]
name3 = masss['character'].iloc[2]
BSname1 = masss['battlesuit'].iloc[0]
BSname2 = masss['battlesuit'].iloc[1]
BSname3 = masss['battlesuit'].iloc[2]
char1 = 'D:\expsys\images\%s\%s' % (name1, BSname1)
char2 = 'D:\expsys\images\%s\%s' % (name2, BSname2)
char3 = 'D:\expsys\images\%s\%s' % (name3, BSname3)
type1 = 'D:\expsys\%s' % masss['bs type'].iloc[0]
type2 = 'D:\expsys\%s' % masss['bs type'].iloc[1]
type3 = 'D:\expsys\%s' % masss['bs type'].iloc[2]
self.ex = Window2(self) # !!!
self.ex.load_image1(char1, 0, 0, 0, 0)
self.ex.load_image1(char2, 250, 0, 0, 0)
self.ex.load_image1(char3, 500, 0, 0, 0)
self.ex.set_label(name1, 50, 300, 150, 30)
self.ex.set_label(name2, 300, 300, 150, 30)
self.ex.set_label(name3, 550, 300, 150, 30)
self.ex.set_label(BSname1, 50, 328, 150, 30)
self.ex.set_label(BSname2, 300, 328, 150, 30)
self.ex.set_label(BSname3, 550, 328, 150, 30)
self.ex.load_image(type1, 10, 310, 150, 30)
self.ex.load_image(type2, 260, 310, 150, 30)
self.ex.load_image(type3, 510, 310, 150, 30)
self.w1 = Window1() # !!!
self.show_window_1() # !!!
def show_window_1(self):
self.w1.button.clicked.connect(self.show_window_2)
self.w1.show()
def show_window_2(self):
self.ex.show()
self.w1.hide()
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWindow(masss) # ! masss
sys.exit(app.exec_())
test1.py
from PyQt5.QtWidgets import QMainWindow, QApplication, QLabel, QWidget, QPushButton
from PyQt5.QtGui import QPixmap, QIcon
from PyQt5.QtCore import Qt
class Window1(QWidget):
def __init__(self):
super(Window1, self).__init__()
self.setWindowTitle('Window1')
self.setMinimumWidth(200)
self.setMinimumHeight(50)
self.button = QPushButton(self)
self.button.setText('Ok')
self.button.show()
class Window2(QWidget):
# def __init__(self):
# super(Window2, self).__init__()
def __init__(self, parent=None): # +
super(Window2, self).__init__(parent, Qt.Window) # +
self.parent = parent # +
self.setWindowTitle('HI Helper Beta 0.1')
self.setGeometry(300, 300, 700, 360)
self.setWindowIcon(QIcon('log.png'))
def load_image1(self, file_name, z1, z2, z3, z4):
pixmap = QPixmap(file_name)
pixmap = pixmap.scaled(250,250)
self.label = QLabel(self)
self.label.setPixmap(pixmap)
self.label.setGeometry(z1, z2, z3, z4)
self.label.resize(200, 350)
self.label.setStyleSheet("""
QLabel {
padding: 4px;
border: 4px solid black;
background-color: #ffffff;
}
""")
def load_image(self, file_name, z1, z2, z3, z4):
pixmap = QPixmap(file_name)
self.label = QLabel(self)
self.label.setPixmap(pixmap)
self.label.setGeometry(z1, z2, z3, z4)
def set_label(self,text, z1, z2, z3, z4):
self.label1 = QLabel(self)
self.label1.setGeometry(z1, z2, z3, z4)
self.label1.setText(text)
self.label1.setStyleSheet("""
QLabel {
padding: 4px;
border: 2px solid black;
background-color: #ffffff;
}
""")
# +++
def closeEvent(self, event): # +++
self.parent.show() # +++