Как сделать одно окно открытым одновременно? PYQT5 - PullRequest
0 голосов
/ 22 октября 2019

как я могу заставить код работать так, чтобы при нажатии кнопки «Продолжить» появлялась страница «Выбрать время», но страница календаря скрывалась?

Похоже, что когда я нажимаю кнопку продолжения, обе страницы открываются.

Ожидаемый вывод состоял в том, что одновременно открывается только одна страница !!

Мой код:

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.window = QWidget()
        self.title = "Select date from calendar"
        self.left, self.top, self.width, self.height = 600, 100, 500, 480
        self.iconName = "Ok.png"  # <--- home.png
        self.setWindowTitle(self.title)
        self.setWindowIcon(QtGui.QIcon(self.iconName))
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.calendar = QCalendarWidget()
        self.calendar.setGridVisible(True)
        self.calendar.selectionChanged.connect(self.onSelectionChanged)

        self.label = QLabel()
        self.label.setFont(QtGui.QFont("Sanserif", 10))
        self.label.setStyleSheet('color: blue;')

        self.proceedbutton = QPushButton("Proceed to select time", self)
        self.proceedbutton.setToolTip("<h3>Start the Session</h3>")
        self.proceedbutton.setEnabled(False)
        self.proceedbutton.clicked.connect(self.window2)
        self.show()
        self.hide()

        self.backbutton = QPushButton("Back", self)
        self.backbutton.setToolTip("<h3>Start the Session</h3>")

        self.comboBox = None

        self.grid = QtWidgets.QGridLayout(self)
        self.grid.addWidget(self.calendar, 0, 0, 1, 3)
        self.grid.addWidget(self.label, 1, 0, 1, 3)
        self.grid.addWidget(self.backbutton, 2, 1, 1, 1)
        self.grid.addWidget(self.proceedbutton, 2, 2, 1, 1)

    def window2(self):
        self.window.setWindowTitle("Select Time")
        self.window.setGeometry(self.left / 3, self.top, self.width / 3, self.height / 3)

        self.label = QLabel("Select Time")

        self.comboBox = QtWidgets.QComboBox()
        self.comboBox.addItems(["choose time", "0700", "0800", "0900", "1000", "1100", "1200", "1300",
                                "1400", "1500","1600","1700","1800","1900","2000","2100", "2200"])
        self.comboBox.activated[str].connect(self.onComboActivated)

        layout = QFormLayout(self.window)
        layout.addRow('Choose Time', self.comboBox)

        self.window.show()

    def onSelectionChanged(self):
        ca = self.calendar.selectedDate()
        self.label.setText(ca.toString())
        self.proceedbutton.setEnabled(True)

    def onComboActivated(self, text):
        print("choose time: {}".format(text))


if __name__ == '__main__':
    App = QApplication([])
    window = Window()
    window.show()
    sys.exit(App.exec())

image

1 Ответ

0 голосов
/ 22 октября 2019

Этот код использует QStackedWidget для замены содержимого в одном окне.

Имеет две функции для создания двух виджетов с контентом - и они помещаются в стек QStackedWidget.

Сначала он использует self.stack.setCurrentIndex(0), чтобы показать виджет с календарем, и кнопку, которая запускает функцию с self.stack.setCurrentIndex(1), чтобы показать виджет со временем. Этот виджет также имеет кнопку, которая запускается снова self.stack.setCurrentIndex(0), чтобы снова показать календарь.

import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class Window(QWidget):

    def __init__(self):
        super().__init__()

        self.left, self.top, self.width, self.height = 600, 100, 500, 480

        self.page1 = self.create_page1()
        self.page2 = self.create_page2()

        self.stack = QStackedWidget()
        self.stack.addWidget(self.page1)
        self.stack.addWidget(self.page2)

        hbox = QHBoxLayout(self)
        hbox.addWidget(self.stack)
        self.setLayout(hbox)

        self.show_page1()

        self.show()


    def create_page1(self):
        page = QWidget()
        #self.iconName = "Ok.png"  # <--- home.png
        #self.setWindowIcon(QtGui.QIcon(self.iconName))

        page.calendar = QCalendarWidget(page)
        page.calendar.setGridVisible(True)
        page.calendar.selectionChanged.connect(self.onSelectionChanged)

        page.label = QLabel(page)
        #page.label.setFont(QtGui.QFont("Sanserif", 10))
        page.label.setStyleSheet('color: blue;')

        page.proceedbutton = QPushButton("Proceed to select time", page)
        page.proceedbutton.setToolTip("<h3>Start the Session</h3>")
        page.proceedbutton.setEnabled(False)
        page.proceedbutton.clicked.connect(self.show_page2)

        page.backbutton = QPushButton("Back", page)
        page.backbutton.setToolTip("<h3>Start the Session</h3>")

        page.comboBox = None

        page.grid = QGridLayout(page)
        page.grid.addWidget(page.calendar, 0, 0, 1, 3)
        page.grid.addWidget(page.label, 1, 0, 1, 3)
        page.grid.addWidget(page.backbutton, 2, 1, 1, 1)
        page.grid.addWidget(page.proceedbutton, 2, 2, 1, 1)

        return page

    def create_page2(self):
        page = QWidget()

        layout = QFormLayout(page)

        page.comboBox = QComboBox(page)
        page.comboBox.addItems(["choose time", "0700", "0800", "0900", "1000", "1100", "1200", "1300",
                                "1400", "1500","1600","1700","1800","1900","2000","2100", "2200"])
        page.comboBox.activated[str].connect(self.onComboActivated)
        layout.addRow('Choose Time', page.comboBox)

        page.proceedbutton = QPushButton("Back", page)
        page.proceedbutton.clicked.connect(self.show_page1)
        layout.addRow(page.proceedbutton)

        return page

    def show_page1(self):
        self.setWindowTitle("Select date from calendar")
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.stack.setCurrentIndex(0)

    def show_page2(self):
        self.setWindowTitle("Select Time")
        self.setGeometry(self.left / 3, self.top, self.width / 3, self.height / 3)
        self.stack.setCurrentIndex(1)

    def onSelectionChanged(self):
        ca = self.page1.calendar.selectedDate()
        self.page1.label.setText(ca.toString())
        self.page1.proceedbutton.setEnabled(True)

    def onComboActivated(self, text):
        print("choose time: {}".format(text))


if __name__ == '__main__':
    App = QApplication([])
    window = Window()
    window.show()
    sys.exit(App.exec())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...