简体   繁体   中英

How do i make one window open at a time ? PYQT5

how can I make the code work in a way that when I click the proceed button, the 'select time' page appears but the calendar page hides?

As it appears that when I click the proceed button, both pages are open.

The expected output was that only one page opens at a time!!

My code:

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

This code uses QStackedWidget to replace content in one window.

It has two functions to create two widgets with content - and they are put in stack QStackedWidget .

First it uses self.stack.setCurrentIndex(0) to show widget with calendara and button which runs function with self.stack.setCurrentIndex(1) to show widget with time. This widget also has button which runs again self.stack.setCurrentIndex(0) to show again calendar.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM