Python 如何在PyQt5中嵌入表

Python 如何在PyQt5中嵌入表,python,pyqt,pyqt5,Python,Pyqt,Pyqt5,我一直在使用PyQt5在Python3中编写GUI 我在尝试在PyQt的QMainWindow类中嵌入表时遇到问题 在下面的代码中,我有两个类——一个控制窗口(对象类型为QMainWindow),另一个控制表(对象类型为QWidget)。我知道代码正在生成我的主窗口和表,因为它们在两个单独的窗口中弹出。我试图做的是用按钮将表嵌入主窗口中 如下图所示: 浮动窗口问题 我忘了做什么或不包括什么?谢谢你的帮助 代码如下: import sys from PyQt5.QtWidgets import

我一直在使用PyQt5在Python3中编写GUI

我在尝试在PyQt的QMainWindow类中嵌入表时遇到问题

在下面的代码中,我有两个类——一个控制窗口(对象类型为QMainWindow),另一个控制表(对象类型为QWidget)。我知道代码正在生成我的主窗口和表,因为它们在两个单独的窗口中弹出。我试图做的是用按钮将表嵌入主窗口中

如下图所示:

浮动窗口问题

我忘了做什么或不包括什么?谢谢你的帮助

代码如下:

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

class UserInterface(QMainWindow):

    def __init__(self):
        super(UserInterface, self).__init__()
        self.TaskBar()
        self.Buttons()
        self.tabler = MyTable()

    def TaskBar(self):
        self.setWindowTitle("MyWindow")
        self.setGeometry(QDesktopWidget().screenGeometry())

    def Buttons(self):
        close_button = QPushButton("Close", self)
        close_button.resize(100, 50)
        close_button.move(100, 900)
        close_button.setStyleSheet("QPushButton {font-size : 24px}")
        close_button.clicked.connect(sys.exit)

class MyTable(QWidget):

    def __init__(self):
        super(MyTable, self).__init__()
        self.Table()

    def Table(self):
        self.mytable()
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.tableWidget)
        self.setLayout(self.layout)
        self.show()

    def mytable(self):
        self.tableWidget = QTableWidget()
        self.tableWidget.setRowCount(1)
        self.tableWidget.setColumnCount(1)
        self.tableWidget.setItem(0, 0 , QTableWidgetItem("Hello"))
        self.tableWidget.move(300, 300)


def Main():
    qapplication_constructor = QApplication(sys.argv)
    gui = UserInterface()
    gui.show()
    sys.exit(qapplication_constructor.exec_())

if __name__ == "__main__":
    Main()

每个QMainWindow都必须有一个中心小部件。您可以将另一个小部件设置为QMainWindow类的中心小部件。但是,您需要以不同的方式排列按钮,以便将其添加到正确的布局中。大概是这样的:

class UserInterface(QMainWindow):

    def __init__(self):
        super(UserInterface, self).__init__()
        self.TaskBar()
        self.Buttons()

        self.table_widget = MyTable()

        close_button = QPushButton("Close", self)
        close_button.resize(100, 50)
        close_button.move(100, 900)
        close_button.setStyleSheet("QPushButton {font-size : 24px}")
        close_button.clicked.connect(sys.exit)

        self.widget = QWidget(self)
        layout = QGridLayout()
        self.widget.setLayout(layout)
        layout.addWidget(self.table_widget)
        layout.addWidget(close_button)

        self.setCentralWidget(self.widget)

根据要设置网格布局的方式,可以对其进行不同的排列。如果网格布局不符合您的需要,则有几种可用的网格布局。

这与我以前的尝试类似,但应用了您的修复,我仍然遇到相同的问题:表格现在占据了整个窗口,我看不到按钮。我试图做的是在窗口内对表进行分区,这样我仍然可以与按钮进行交互。有什么想法吗?我试图使用resize方法调整表的大小,但没有成功。@答:是的,我已经更改了答案,以提供一个不同的解决方案,允许这样做。就快到了!现在,我只是不希望按钮随表格调整大小,因为我想在表格的右侧添加其他按钮。我宁愿将表嵌入到完整的侧窗中,而不是定义窗口。可能吗?非常感谢。使用QGridLayout,您可以指定您想要项目的行和列,并自定义小部件的外观。是QGridLayout的文档页面。例子是C++,但是应该很容易翻译成Python。我觉得我好像在什么地方遗漏了什么东西——我没有意识到文档中有这一点。几个小时来一直在研究文档,但不知怎的错过了。感谢@MalloyDelacroix的帮助!