我正在尝试在PyQt5中创建我自己的QFileDialog,对其原始的QGridLayout进行一些修改。
在PyQt4中,我只是将QFileDialog子类化,并在__init__中的某处调用了self.layout(),它返回了QFileDialog的QGridLayout,然后我就可以自由地做我需要的了。
最近,我被迫在Python3中切换到PyQt5。 self.layout(),findChildren()等没有返回相同的结果(有时会返回None)。
再次,我正在尝试在PyQt5中获取QFileDialog的QGridLayout实例。另外,我正在使用python 3.5,如果它改变了什么。谁知道怎么做?
编辑1 - 添加了一个示例:
PyQt4 - 在Python 2.7.10上测试
import sys
from PyQt4 import QtGui
class MyQFileDialog(QtGui.QFileDialog):
def __init__(self, parent=None):
super(MyQFileDialog, self).__init__(parent=parent)
print(self.layout()) # <=--- Returns <PyQt4.QtGui.QGridLayout object>
def window():
app = QtGui.QApplication(sys.argv)
w = MyQFileDialog()
w.show()
sys.exit(app.exec_())
if __name__ == '__main__':
window()
PyQt5 - 在Python 3.5.2上测试
import sys
from PyQt5 import QtWidgets
class MyQFileDialog(QtWidgets.QFileDialog):
def __init__(self, parent=None):
super(MyQFileDialog, self).__init__(parent=parent)
print(self.layout()) # <=--- Returns None
def window():
app = QtWidgets.QApplication(sys.argv)
w = MyQFileDialog()
w.show()
sys.exit(app.exec_())
if __name__ == '__main__':
window()