相关文章推荐
玉树临风的柚子  ·  Access Kubelet API - ...·  2 天前    · 
儒雅的炒饭  ·  信用哈尔滨·  9 月前    · 
豪爽的皮带  ·  【报错】AttributeError: ...·  11 月前    · 

如何用PyQT5在Python中的Mainwindow中打开一个新窗口?

1 人关注

我对编程完全陌生。我想为Windows创建一个Flashcard应用程序。到目前为止,我可以说我的 "程序 "工作得很好,但当我点击我的小部件时,我不能设法打开一个新窗口。我需要知道我怎样才能准确而具体地写出代码--我必须在什么地方添加具体的内容。 在新窗口中,我想有一个文本字段,我可以写一些注释,选择是否要把文本写成 "强"、"弯 "之类的东西。

我在文档中进行了研究,尝试了一些东西,但它并不像它应该的那样工作。 我希望有人能帮助我解决这个 "问题"。我想在我点击 "甲板 "和其他按钮时创建一个新窗口。 另外,我想在左上角有一个菜单,我可以点击 "新甲板 "或 "帮助 "或类似的东西。

Here is my Code

from PyQt5 import QtWidgets, QtGui, QtCore
import sys
class MyWindow(QtWidgets.QMainWindow):
def __init__(self):
    super(MyWindow, self).__init__()
    self.initUI()
    self.setGeometry(100, 100, 1280, 900)
    self.setWindowTitle("Flashcards!")
def initUI(self):
    wid = QtWidgets.QWidget(self)
    self.setCentralWidget(wid)
    self.screenObject = QtWidgets.QDesktopWidget().screenGeometry(0)
    self.line = QtWidgets.QFrame(self)
    self.line.setGeometry(QtCore.QRect(0, 0, self.screenObject.width(), 2))
    self.line.setStyleSheet("border: 1px solid rgb(170, 170, 170)")
    self.line_2 = QtWidgets.QFrame(self)
    self.line_2.setGeometry(QtCore.QRect(0, 35, self.screenObject.width(), 2))
    self.line_2.setStyleSheet("border: 1px solid rgb(170, 170, 170)")
    self.topfont = QtGui.QFont()
    self.topfont.setBold(True)
    self.topfont.setWeight(75)
    self.topfont.setPointSize(9)

###########Buttons####################################################

    self.deckLabel = QtWidgets.QLabel(self)
    self.deckLabel.setText("Decks")
    self.deckLabel.setFont(self.topfont)
    self.deckLabel.setStyleSheet("QLabel::hover {color: rgb(100, 100, 100)}")
    self.deckLabel.mousePressEvent = self.clicked
    self.addLabel = QtWidgets.QLabel(self)
    self.addLabel.setText("Add")
    self.addLabel.setFont(self.topfont)
    self.addLabel.setStyleSheet("QLabel::hover {color: rgb(100, 100, 100)}")
    self.addLabel.mousePressEvent = self.clicked
    self.browseLabel = QtWidgets.QLabel(self)
    self.browseLabel.setText("Browse")
    self.browseLabel.setFont(self.topfont)
    self.browseLabel.setStyleSheet("QLabel::hover {color: rgb(100, 100, 100)}")
    self.browseLabel.mousePressEvent = self.clicked
    self.statsLabel = QtWidgets.QLabel(self)
    self.statsLabel.setText("Stats")
    self.statsLabel.setFont(self.topfont)
    self.statsLabel.setStyleSheet("QLabel::hover {color: rgb(100, 100, 100)}")
    self.statsLabel.mousePressEvent = self.clicked
    self.syncLabel = QtWidgets.QLabel(self)
    self.syncLabel.setText("Sync")
    self.syncLabel.setFont(self.topfont)
    self.syncLabel.setStyleSheet("QLabel::hover {color: rgb(100, 100, 100)}")
    self.syncLabel.mousePressEvent = self.clicked
    self.hbox = QtWidgets.QHBoxLayout()
    self.hbox.setSpacing(60)
    self.hbox.addStretch()
    self.hbox.addWidget(self.deckLabel)
    self.hbox.addWidget(self.addLabel)
    self.hbox.addWidget(self.browseLabel)
    self.hbox.addWidget(self.statsLabel)
    self.hbox.addWidget(self.syncLabel)
    self.hbox.addStretch()
    self.hbox.setAlignment(QtCore.Qt.AlignTop)
    wid.setLayout(self.hbox)
sys.exit(app.exec_())
    
python
windows
pyqt5
new-window
MrZellular
MrZellular
发布于 2022-07-28
1 个回答
Romain Capron
Romain Capron
发布于 2022-07-28
已采纳
0 人赞同

我最近有一个类似的问题。我想在点击一个按钮时显示一个弹出窗口。为了做到这一点,我简单地创建了一个函数,当你点击按钮时就会被触发。与你的 clicked() 函数非常相似。

在这个函数中,你可以定义你的新窗口参数并显示它。 请注意,如果你想生成这个窗口并继续处理代码,你可以使用 .show() ;如果你想等待窗口关闭后再继续执行代码,你可以使用 .exec_()

在我的案例中,它显示了一个弹出窗口,警告用户需要重新启动。

def restart(self):
    # Create a popup window
    self.w = QMessageBox()
    # Custom Texts
    self.w.setWindowTitle("GUI Version Check")
    self.w.setText("A newer version of the GUI is available.")
    # Custom Icons
    # use a file logo.svg to replace the default WindowIcon
    self.w.setWindowIcon(QtGui.QIcon('logo.svg'))
    # Add a Warning Icon on the new window
    self.w.setIcon(QMessageBox.Warning)
    # Custom Button: rename Yes by Restart
    self.w.setStandardButtons(QMessageBox.Yes)
    b = self.w.button(QMessageBox.Yes)
    b.setText("Restart")