• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PyQt5 - problem przy wyswietlaniu kilku okien

Object Storage Arubacloud
0 głosów
271 wizyt
pytanie zadane 17 kwietnia 2020 w C i C++ przez danielw1210 Nowicjusz (120 p.)

Witam,

Zaczynam zabawę z PyQt5 i zrobiłem aplikacje wisielec. W menu masz możliwość wybrania "Zasad gry", po czym okno się otwiera jednak otwiera się ono pod mainwindow i nic nie można zrobić. Próbowałem dodać

MainWindow.hide()

jednak wtedy po zamknięciu okna z zasadami gry mainwindow się nie pokazuje a cała aplikacja kończy działanie. Jest jakaś funkcja,która pozwala na wyświetlenie zasad gry "przed" mainwindow?

Funkcja wyświetlająca widżet z zasadami gry:

    def zasady(self):
        self.zasadyshow=QtWidgets.QWidget()
        self.ui = Ui_Zasady_gry()
        self.ui.setupUi(self.zasadyshow)
        self.zasadyshow.show()

 

komentarz 17 kwietnia 2020 przez LuQ232 Mądrala (7,200 p.)

Spróbuj tak:

def zasady(self):
    self.zasadyshow=QtWidgets.QWidget()
    self.ui = Ui_Zasady_gry()
    self.ui.setupUi(self.zasadyshow)
    self.zasadyshow.activateWindow()
    self.zasadyshow.show()

 

komentarz 17 kwietnia 2020 przez danielw1210 Nowicjusz (120 p.)
Niestety nie pomogło, mam wrażenie że okno z zasadami otwiera się prawidłowo jednak automatycznie na "wierzchu" pokazuje się MainWindow i nie mogę nawet kliknąć w okno z zasadami, gdyż MainWindow wymaga jakiejś akcji.
komentarz 17 kwietnia 2020 przez LuQ232 Mądrala (7,200 p.)
Jeżeli możesz wklej tutaj cały kod. Może problem leży gdzieś indziej. Jedyne co przychodzi mi do głowy bez kodu to to, że zanim wywołujesz self.zasadyshow.show() trzeba przerzucić fokus na okno z zasadami bo od początku jest na głownym oknie. Podeślij kod, wtedy będziemy myśleć :)
komentarz 18 kwietnia 2020 przez danielw1210 Nowicjusz (120 p.)

Plik z zasadami gry:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Zasady_gry(object):
    def setupUi(self, Zasady_gry):
        Ui_Zasady_gry.__init__(self)
        Zasady_gry.setObjectName("Zasady_gry")
        Zasady_gry.resize(859, 735)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("../npgwisielec/hangman.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Zasady_gry.setWindowIcon(icon)
        self.zasadylabel = QtWidgets.QLabel(Zasady_gry)
        self.zasadylabel.setGeometry(QtCore.QRect(30, 140, 801, 511))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.zasadylabel.setFont(font)
        self.zasadylabel.setObjectName("zasadylabel")
        self.koniecwbtn = QtWidgets.QPushButton(Zasady_gry)
        self.koniecwbtn.setGeometry(QtCore.QRect(700, 670, 75, 23))
        self.koniecwbtn.setObjectName("koniecwbtn")
        self.label = QtWidgets.QLabel(Zasady_gry)
        self.label.setGeometry(QtCore.QRect(300, 40, 291, 91))
        font = QtGui.QFont()
        font.setFamily("Freestyle Script")
        font.setPointSize(48)
        self.label.setFont(font)
        self.label.setStyleSheet("color: rgb(0, 0, 127);")
        self.label.setObjectName("label")

        self.retranslateUi(Zasady_gry)
        QtCore.QMetaObject.connectSlotsByName(Zasady_gry)
        self.koniecwbtn.clicked.connect(self.zamknij)

    def retranslateUi(self, Zasady_gry):
        _translate = QtCore.QCoreApplication.translate
        Zasady_gry.setWindowTitle(_translate("Zasady_gry", "Zasady Gry"))
        self.zasadylabel.setText(_translate("Zasady_gry", "Użytkowniku witaj w grze Wisielec!!!\n"
"Oto krótki opis przebiegu rozgrywki:\n"
"Na początku zostaniesz poproszony o wybór kategorii hasła oraz poziomu trudności.\n"
"Po dokonaniu wyboru i naciśnięciu przycisku \"Rozpocznij grę!\" ukaże się na ekranie zakodowane hasło.\n"
"Dostaniesz dziesięć żyć oraz zostaniesz poproszony o podanie litery.\n"
"Jeśli Twoja litera wystąpi w haśle przynajmniej raz zakodowane pola zostaną nią zastąpione na przykład:\n"
"    Hasło: P _ _ _ _ _ R\n"
"    Podaję literę \"O\"\n"
"    Hasło: P O _ _ _ O R\n"
"W przeciwnym wypadku utracisz życie. Dodatkowo dodane zostaną również punkty za każdą odgadniętą literę. \n"
"Gra się kończy gdy odgadniesz wszystkie litery lub stracisz wszystkie życia.\n"
"Na koniec ukaże się również twój wynik który zostanie uzależniony od poziomu trudności który wybrałeś.\n"
"(Więcej na ten temat poniżej)\n"
"\n"
"Życzymy miłej zabawy :)\n"
"\n"
"\n"
"====================================================================================\n"
"\n"
"Na początku gry gracz posiada 0 punktów, za każdą błędną odpowiedź traci 100 punktów, a za poprawną zdobywa 500.\n"
"Po zakończeniu rozgrywki wynik zostaje pomnożony przez współczynnik zależny od poziomu.\n"
"\n"
"Współczynniki dla odpowiednich poziomów:\n"
"Łatwy:  1.0\n"
"Średni: 3.0\n"
"Trudny: 5.0"))
        self.koniecwbtn.setText(_translate("Zasady_gry", "Koniec"))
        self.label.setText(_translate("Zasady_gry", "  Zasady Gry"))

    def zamknij(self):
        exit()



if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Zasady_gry = QtWidgets.QWidget()
    ui = Ui_Zasady_gry()
    ui.setupUi(Zasady_gry)
    Zasady_gry.show()
    sys.exit(app.exec_())

Plik z MainWindow:

from zasadygry import Ui_Zasady_gry
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.setWindowModality(QtCore.Qt.ApplicationModal)
        MainWindow.resize(922, 650)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("../npgwisielec/hangman.jpg"),QtGui.QIcon.Normal, QtGui.QIcon.Off)
        MainWindow.setWindowIcon(icon)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.labelwisielec = QtWidgets.QLabel(self.centralwidget)
        self.labelwisielec.setGeometry(QtCore.QRect(380, 40, 381, 131))
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(32, 74, 135))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active,QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(32, 74, 135))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive,QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(190, 190, 190))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
        self.labelwisielec.setPalette(palette)
        font = QtGui.QFont()
        font.setFamily("Freestyle Script")
        font.setPointSize(72)
        font.setBold(False)
        font.setWeight(50)
        self.labelwisielec.setFont(font)
        self.labelwisielec.setStyleSheet("")
        self.labelwisielec.setTextFormat(QtCore.Qt.PlainText)
        self.labelwisielec.setObjectName("labelwisielec")
        self.rozpocznij_bnt = QtWidgets.QPushButton(self.centralwidget)
        self.rozpocznij_bnt.setGeometry(QtCore.QRect(370, 220,241,41))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.rozpocznij_bnt.setFont(font)
        self.rozpocznij_bnt.setObjectName("rozpocznij_bnt")
        self.podaj_btn = QtWidgets.QLabel(self.centralwidget)
        self.podaj_btn.setGeometry(QtCore.QRect(65, 480, 125, 31))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.podaj_btn.setFont(font)
        self.podaj_btn.setObjectName("podaj_btn")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(50, 260, 851, 201))
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.hasloedt = QtWidgets.QTextEdit(self.frame)
        self.hasloedt.setGeometry(QtCore.QRect(113, 10, 711, 51))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.hasloedt.setFont(font)
        self.hasloedt.setReadOnly(True)
        self.hasloedt.setObjectName("hasloedt")
        self.haslolabel = QtWidgets.QLabel(self.frame)
        self.haslolabel.setGeometry(QtCore.QRect(40, 10, 80, 41))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.haslolabel.setFont(font)
        self.haslolabel.setObjectName("haslolabel")
        self.komunikatlabel = QtWidgets.QLabel(self.frame)
        self.komunikatlabel.setGeometry(QtCore.QRect(30, 80, 121, 31))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.komunikatlabel.setFont(font)
        self.komunikatlabel.setObjectName("komunikatlabel")
        self.komunikatedt = QtWidgets.QTextEdit(self.frame)
        self.komunikatedt.setGeometry(QtCore.QRect(10, 110, 811, 81))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.komunikatedt.setFont(font)
        self.komunikatedt.setReadOnly(True)
        self.komunikatedt.setObjectName("komunikatedt")
        self.koniec_btn = QtWidgets.QPushButton(self.centralwidget)
        self.koniec_btn.setGeometry(QtCore.QRect(720, 530, 111, 31))
        self.koniec_btn.setObjectName("koniec_btn")
        self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.layoutWidget.setGeometry(QtCore.QRect(60, 160, 821, 41))
        self.layoutWidget.setObjectName("layoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label_kateg = QtWidgets.QLabel(self.layoutWidget)
        self.label_kateg.setMaximumSize(QtCore.QSize(101, 16777215))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.label_kateg.setFont(font)
        self.label_kateg.setObjectName("label_kateg")
        self.horizontalLayout.addWidget(self.label_kateg)
        self.comboBox_kat = QtWidgets.QComboBox(self.layoutWidget)
        self.comboBox_kat.setMaximumSize(QtCore.QSize(101, 16777215))
        font = QtGui.QFont()
        font.setPointSize(10)
        self.comboBox_kat.setFont(font)
        self.comboBox_kat.setObjectName("comboBox_kat")
        self.comboBox_kat.addItem("")
        self.comboBox_kat.addItem("")
        self.comboBox_kat.addItem("")
        self.comboBox_kat.addItem("")
        self.comboBox_kat.addItem("")
        self.comboBox_kat.addItem("")
        self.horizontalLayout.addWidget(self.comboBox_kat)
        self.label_poziom = QtWidgets.QLabel(self.layoutWidget)
        self.label_poziom.setMaximumSize(QtCore.QSize(181, 16777215))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.label_poziom.setFont(font)
        self.label_poziom.setObjectName("label_poziom")
        self.horizontalLayout.addWidget(self.label_poziom)
        self.comboBox_pt = QtWidgets.QComboBox(self.layoutWidget)
        self.comboBox_pt.setMaximumSize(QtCore.QSize(81, 16777215))
        font = QtGui.QFont()
        font.setPointSize(10)
        self.comboBox_pt.setFont(font)
        self.comboBox_pt.setObjectName("comboBox_pt")
        self.comboBox_pt.addItem("")
        self.comboBox_pt.addItem("")
        self.comboBox_pt.addItem("")
        self.horizontalLayout.addWidget(self.comboBox_pt)
        self.label_wynik = QtWidgets.QLabel(self.layoutWidget)
        self.label_wynik.setMaximumSize(QtCore.QSize(71, 16777215))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.label_wynik.setFont(font)
        self.label_wynik.setObjectName("label_wynik")
        self.horizontalLayout.addWidget(self.label_wynik)
        self.wynik_edt = QtWidgets.QTextEdit(self.layoutWidget)
        self.wynik_edt.setMaximumSize(QtCore.QSize(111, 16777215))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.wynik_edt.setFont(font)
        self.wynik_edt.setToolTip("")
        self.wynik_edt.setReadOnly(True)
        self.wynik_edt.setObjectName("wynik_edt")
        self.horizontalLayout.addWidget(self.wynik_edt)
        self.podaj_edt = QtWidgets.QLineEdit(self.centralwidget)
        self.podaj_edt.setGeometry(QtCore.QRect(200, 480, 121, 31))
        self.podaj_edt.setObjectName("podaj_edt")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 922, 21))
        self.menubar.setObjectName("menubar")
        self.menuMenu = QtWidgets.QMenu(self.menubar)
        self.menuMenu.setObjectName("menuMenu")
        self.menuStatystyki = QtWidgets.QMenu(self.menubar)
        self.menuStatystyki.setObjectName("menuStatystyki")
        self.menuZasady_gry = QtWidgets.QMenu(self.menubar)
        self.menuZasady_gry.setObjectName("menuZasady_gry")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.actionZapisz_Gr = QtWidgets.QAction(MainWindow)
        self.actionZapisz_Gr.setObjectName("actionZapisz_Gr")
        self.actionWczytaj_Gr = QtWidgets.QAction(MainWindow)
        self.actionWczytaj_Gr.setObjectName("actionWczytaj_Gr")
        self.actionWyswietl_zasady_gry = QtWidgets.QAction(MainWindow)
        self.actionWyswietl_zasady_gry.setObjectName("actionWy_wietl_zasady_gry")
        self.actionPokaz_statystyki = QtWidgets.QAction(MainWindow)
        self.actionPokaz_statystyki.setObjectName("actionPoka_statystyki")
        self.menuMenu.addAction(self.actionZapisz_Gr)
        self.menuMenu.addAction(self.actionWczytaj_Gr)
        self.menuStatystyki.addAction(self.actionPokaz_statystyki)
        self.menuZasady_gry.addAction(self.actionWyswietl_zasady_gry)
        self.menubar.addAction(self.menuMenu.menuAction())
        self.menubar.addAction(self.menuStatystyki.menuAction())
        self.menubar.addAction(self.menuZasady_gry.menuAction())

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.actionWyswietl_zasady_gry.triggered.connect(self.zasady)
def retranslateUi(self, MainWindow):
    _translate = QtCore.QCoreApplication.translate
    MainWindow.setWindowTitle(_translate("MainWindow", "Wisielec"))
    self.labelwisielec.setText(_translate("MainWindow", "Wisielec"))
    self.rozpocznij_bnt.setText(_translate("MainWindow", "Rozpocznij grę!"))
    self.podaj_btn.setText(_translate("MainWindow", "Podaj literę:"))
    self.haslolabel.setText(_translate("MainWindow", "Hasło:"))
    self.komunikatlabel.setText(_translate("MainWindow", "Komunikat:"))
    self.koniec_btn.setText(_translate("MainWindow", "Koniec"))
    self.label_kateg.setText(_translate("MainWindow", "Kategoria:"))
    self.comboBox_kat.setItemText(0, _translate("MainWindow", "Geografia"))
    self.comboBox_kat.setItemText(1, _translate("MainWindow", "Jedzenie"))
    self.comboBox_kat.setItemText(2, _translate("MainWindow", "Kino"))
    self.comboBox_kat.setItemText(3, _translate("MainWindow", "Sport"))
    self.comboBox_kat.setItemText(4, _translate("MainWindow", "Nauka"))
    self.comboBox_kat.setItemText(5, _translate("MainWindow", "Zwierzęta"))
    self.label_poziom.setText(_translate("MainWindow", "Poziom trudności:"))
    self.comboBox_pt.setItemText(0, _translate("MainWindow", "Łatwy"))
    self.comboBox_pt.setItemText(1, _translate("MainWindow", "Średni"))
    self.comboBox_pt.setItemText(2, _translate("MainWindow", "Trudny"))
    self.label_wynik.setText(_translate("MainWindow", "Wynik:"))
    self.menuMenu.setTitle(_translate("MainWindow", "Menu"))
    self.menuStatystyki.setTitle(_translate("MainWindow", "Statystyki"))
    self.menuZasady_gry.setTitle(_translate("MainWindow", "Zasady gry"))
    self.actionZapisz_Gr.setText(_translate("MainWindow", "Zapisz Grę"))
    self.actionWczytaj_Gr.setText(_translate("MainWindow", "Wczytaj Grę"))
    self.actionWyswietl_zasady_gry.setText(_translate("MainWindow", "Wyświetl zasady gry"))
    self.actionPokaz_statystyki.setText(_translate("MainWindow", "Pokaż statystyki"))

def koniec(self):
    exit() #funkcjonalność przycisku koniec
def zasady(self):
        self.zasadyshow=QtWidgets.QWidget()
        self.ui2 = Ui_Zasady_gry()
        self.ui2.setupUi(self.zasadyshow)
        self.zasadyshow.show()

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

komentarz 20 kwietnia 2020 przez danielw1210 Nowicjusz (120 p.)

@LuQ232, Kod wklejony. Próbowałem ustawić fokus na okno komendą setFocus(), wcześniej usuwając fokus  z MainWindow komendą clearFocus(), lecz to dalej nie rozwiązuje problemu. :(

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 358 wizyt
0 głosów
2 odpowiedzi 119 wizyt
pytanie zadane 2 stycznia w Python przez ride3bike Nowicjusz (180 p.)
0 głosów
1 odpowiedź 81 wizyt

92,568 zapytań

141,422 odpowiedzi

319,637 komentarzy

61,957 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...