में PyQt का उपयोग करके गतिशील रूप से विजेट जोड़ने और हटाने के लिए, मैं एक इंटरफ़ेस बनाने की कोशिश कर रहा हूं जिसके लिए मैं गतिशील रूप से विजेट जोड़ या निकाल सकता हूं। मैं विजेट के लिए एक अलग वर्ग को परिभाषित करना चाहता हूं जिसे जोड़ा या हटा दिया जाएगा। मैं उस विजेट को प्राप्त करने में सक्षम नहीं हूं जो मैं मुख्य इंटरफ़ेस के अंदर प्रदर्शित करने के लिए तत्काल हूं। यहाँ कोड मैं का उपयोग कर रहा है:PyQt
from PyQt4 import QtGui, QtCore
import sys
class Main(QtGui.QMainWindow):
def __init__(self, parent = None):
super(Main, self).__init__(parent)
# central widget
self.centralWidget = QtGui.QWidget(self)
# main layout
self.vLayout = QtGui.QVBoxLayout(self.centralWidget)
# main button
self.pButton_add = QtGui.QPushButton(self.centralWidget)
self.pButton_add.setText('button to add other widgets')
# scroll area
self.scrollArea = QtGui.QScrollArea(self.centralWidget)
self.scrollArea.setWidgetResizable(True)
# scroll area widget contents
self.scrollAreaWidgetContents = QtGui.QWidget(self.scrollArea)
# scroll area widget contents - layout
self.formLayout = QtGui.QFormLayout(self.scrollAreaWidgetContents)
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
# add all main to the main vLayout
self.vLayout.addWidget(self.pButton_add)
self.vLayout.addWidget(self.scrollArea)
# set central widget
self.setCentralWidget(self.centralWidget)
# connections
self.pButton_add.clicked.connect(self.addWidget)
def addWidget(self):
z = Test(self.scrollAreaWidgetContents)
count = self.formLayout.rowCount()
self.formLayout.setWidget(count, QtGui.QFormLayout.LabelRole, z)
class Test(QtGui.QWidget):
def __init__(self, parent):
super(Test, self).__init__(parent)
self.pushButton = QtGui.QPushButton(self)
app = QtGui.QApplication(sys.argv)
myWidget = Main()
myWidget.show()
app.exec_()
बात है, जब मैं नीचे दिए गए कोड अपने 'addWidget' विधि के अंदर उपयोग करें, यह वास्तव में क्या मैं इसे क्या करना चाहते हैं, लेकिन वर्ग विधि नहीं करता है काम करने लगते हैं।
z = QtGui.QPushButton(self.scrollAreaWidgetContents)
count = self.formLayout.rowCount())
self.formLayout.setWidget(count, QtGui.QFormLayout.LabelRole, z)
मुझे आश्चर्य है कि z = test() कोई परिणाम क्यों नहीं दे रहा है? कोई विचार? धन्यवाद!
विस्तृत उत्तर के लिए धन्यवाद से निकलता है! फ़ॉर्म लेआउट का उपयोग करने का कारण यह था कि मैं चाहता था कि विजेट स्क्रॉल क्षेत्र के शीर्ष पर दिखने लगें और वहां से रिक्त स्थान भरें, मध्य में दिखाई देने के बजाय और नए विगेट्स बनने के बाद खुद को पुन: व्यवस्थित करें। हालांकि मुझे यकीन है कि ऐसा करने के अन्य तरीके हैं, फॉर्मलेआउट मेरे लिए एक आसान समाधान की तरह लग रहा था .. धन्यवाद फिर से! – boundless
@boundless: आह, मैं देखता हूं। उस पर मेरा दृष्टिकोण 'स्क्रॉलआउटआउट' को दूसरे 'क्यूवीबॉक्स लयआउट' में लपेटकर '1'' के एक हिस्से के साथ जोड़ा जाएगा। यह चीजों को शीर्ष पर रखना चाहिए। – Avaris
एक और चीज जिसे मैं फॉर्मलेआउट के लिए पसंद करता हूं, यह चीजों को शीर्ष पर रखते हुए एक दूसरे के बगल में दो विजेट्स को आसान बनाता है .. हालांकि शायद उस बिंदु पर, मुझे केवल ग्रिड लेआउट का उपयोग करना चाहिए। संकेत के लिए फिर से धन्यवाद! – boundless