QWidget :: setLayout:试图在Window“”上设置QLayout“”,它已经有了一个布局

时间:2016-05-04 21:37:25

标签: python-3.x pyqt5

正如标题所述,我在尝试将窗体布局设置为窗口时遇到问题 - 我不确定它的确含义是“已经有布局”,因为我没有明确地称为setLayout,所以是有一些应用于窗口的默认布局?或者它与我的超级电话有关?

搜索没有给我一个正确的答案(至少不是我的情况),所以我想我会发帖。

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

#Window class
class Window(QMainWindow):
    def __init__(self): # constructor for Window (passes "self" -aka Window- to __init__ to initialize it)
        super(Window, self).__init__() #inherits from QMainWindow
        self.setGeometry(50,50,800,600) #Set window dimensions
        self.setWindowTitle("Google Music Playlist Transfer") #Set window title
        self.setWindowIcon(QIcon('gmusic.png')) #Set window icon
        self.home()

    def home(self):     
        #Set email field
        email = QLineEdit()
        email.setMaxLength(110)
        email.setAlignment(Qt.AlignLeft)

        #Set password field
        pwd = QLineEdit()
        pwd.setAlignment(Qt.AlignLeft)
        pwd.setEchoMode(QLineEdit.Password)

        #Form layout
        layout = QFormLayout()
        layout.addRow("Email: ", email)
        layout.addRow("Password: ", pwd)

        #Login button
        login_btn = QPushButton("Login", self) #login button
        login_btn.clicked.connect(QCoreApplication.instance().quit) #tell button what to do
        login_btn.resize(100, 100)
        login_btn.move(100,100)
        self.setLayout(layout)
        self.show() #Show window

1 个答案:

答案 0 :(得分:1)

我找到了未来路人的问题(虽然我不确切知道为什么会出现这个问题,也许有人可以在评论中对其进行扩展) - 我是继承QWindow而不是QWidget,显然这是设置布局会引起某种问题 - 再次,不确定原因,但将其更改为QWidget确实解决了问题!