gpt4 book ai didi

python - PyQt 打开一个带有表格的子窗口(图灵机应用程序)

转载 作者:行者123 更新时间:2023-12-01 03:34:44 31 4
gpt4 key购买 nike

我想创建一个带有按钮“ruban”的窗口,当我单击此按钮时,它会打开一个新窗口,其中包含一个包含“data”的表格。我的问题是当我运行它时,我单击按钮,它没有出现任何内容......

非常感谢您的帮助!

#!/usr/bin/env python
# -*- coding: utf-8 -*-



import sys
from PyQt4 import QtCore
from PyQt4 import QtGui
from PyQt4.QtCore import *
from PyQt4.QtGui import *

data = {'col1':['1','2','3'], 'col2':['4','5','6'], 'col3':['7','8','9']}

class Window (QtGui.QMainWindow):

def __init__(self):
super(Window, self).__init__()
self.setGeometry(100, 100, 500, 300)
self.setWindowTitle("Machine de Turing")
#self.setWindowIcon(QtGui.QIcon('logo.png'))

self.home()

def home(self):

btn1 = QtGui.QPushButton("Ruban", self)
btn1.clicked.connect(self.edit_ruban)
btn1.resize(btn1.sizeHint())

self.show()


def edit_ruban(self):

table = MyTable(self, data, 5, 3)
table.show()


class MyTable(QTableWidget):
def __init__(self, data, *args):
QTableWidget.__init__(self, *args)
self.data = data
self.setmydata()
self.resizeColumnsToContents()
self.resizeRowsToContents()

def setmydata(self):

horHeaders = []
for n, key in enumerate(sorted(self.data.keys())):
horHeaders.append(key)
for m, item in enumerate(self.data[key]):
newitem = QTableWidgetItem(item)
self.setItem(m, n, newitem)
self.setHorizontalHeaderLabels(horHeaders)



def run():
app = QtGui.QApplication(sys.argv)
GUI=Window()
sys.exit(app.exec_())

run()

最佳答案

您在调用 MyTable.__init__ 时使用了错误的参数。
目前尚不清楚为什么添加 self 作为第一个参数。Python 提供隐式 self,因此必须首先执行 data
如果您打算为 MyTable 提供父窗口,它必须放在最后,请参阅签名 QTableWidget::QTableWidget ( int rows, int columns, QWidget *parent = 0 ),
所以调用会像这样:

table = MyTable(data, 5, 3, self)

但是MyTable默认情况下会嵌入到Window中,显然这不是你想要的。要避免嵌入,请省略 parent 参数并保存对新创建的表的引用

def edit_ruban(self):
table = MyTable(data, 5, 3) # no parent provided
table.show()
self.table = table # this prevents the garbage collector
# from deleting the new table

或者更好地将窗口标志设置为Qt.Window

def edit_ruban(self):
table = MyTable(data, 5, 3, self)
# add Qt.Window to table's flags
table.setWindowFlags(table.windowFlags() | Qt.Window)
table.show()

关于python - PyQt 打开一个带有表格的子窗口(图灵机应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40491474/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com