问题描述
如何打开一个允许我从以下代码中选择时间的新窗口?我尝试使用connect函数连接到windows2,但似乎出现错误.
How do I open a new window which allows me to select the time from the following code? I tried to use connect function to connect to windows2 however it appears that there is an error.
我想通过 Dropbox 选择时间,我可以在上午 10 点、上午 11 点等之前选择时间.有谁知道您也可以如何实现这一点?
I would like to select time by a dropbox where I could choose time by 10 am, 11 am, ect.. Does anyone know how you could implement this as well?
class Window(QMainWindow): def __init__(self): super().__init__() self.label = QLabel() self.calendar = QCalendarWidget() self.title="Select date from calendar" self.left = 600 self.top = 300 self.width = 500 self.height = 480 self.iconName = "home.png" self.setWindowTitle(self.title) self.setWindowIcon(QtGui.QIcon(self.iconName)) self.setGeometry(self.left, self.top, self.width, self.height) self.proceedbutton = QPushButton("Proceed to select time", self) self.proceedbutton.setGeometry(290, 430, 190, 40) self.proceedbutton.setToolTip("<h3>Start the Session</h3>") self.proceedbutton.clicked.connect(self.window2) self.hide() self.backbutton = QPushButton("Back", self) self.backbutton.setGeometry(200, 430, 80, 40) self.backbutton.setToolTip("<h3>Start the Session</h3>") self.Calendar() self.show() def Calendar(self): CalendarVbox = QVBoxLayout() self.calendar.setGridVisible(True) self.label.setFont(QtGui.QFont("Sanserif", 10)) self.label.setStyleSheet('color:black') CalendarVbox.addWidget(self.calendar) CalendarVbox.addWidget(self.label) self.setLayout(CalendarVbox) self.calendar.selectionChanged.connect(self.onSelectionChanged) def window2(self): self.label = QLabel("Select Time", self) self.label.move(200,430) self.setWindowTitle("Select Time") self.setGeometry(self.left, self.top, self.width, self.height) self.show() def onSelectionChanged(self): ca = self.calendar.selectedDate() self.label.setText(ca.toString()) App = QApplication(sys.argv) window = Window() sys.exit(App.exec())
推荐答案
开始使用layouts!
没有父级的小部件 - 有一个窗口.
A widget without a parent - there is a window.
import sys from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * class Window(QWidget): #(QMainWindow): def __init__(self): super().__init__() 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.clicked.connect(self.window2) 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 = QWidget() 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) self.comboBox = QtWidgets.QComboBox() self.comboBox.addItems(["choose time", "10", "11", "12"]) 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()) def onComboActivated(self, text): print("choose time: {}".format(text)) if __name__ == '__main__': App = QApplication(sys.argv) window = Window() window.show() sys.exit(App.exec())