को समझने की कोशिश कर रहा हूं, मैं क्यूग्राफिक्स व्यू और क्यूग्राफिक्ससेन की समझ बनाने की कोशिश कर रहा हूं, विशेष रूप से ग्राफिक्स आइटम कैसे रखें और उन्हें वहां दिखाई दें जहां मैं उन्हें चाहता हूं। जब मैं दृश्य क्षेत्र से दृश्य बड़ा होता हूं तो स्क्रॉल बार दिखाई देगा जब मैं भी उलझन में हूं।पीईक्यूटी: ग्राफिक्स दृश्य/दृश्य
उदाहरण के लिए, कोड के इस बिट एक छोटे से ग्राफिक्स शीर्ष कोने में एक दीर्घवृत्त के साथ देखने का निर्माण करेगा:,
import sys
from PyQt4 import QtGui, QtCore
class MyView(QtGui.QGraphicsView):
def __init__(self):
QtGui.QGraphicsView.__init__(self)
self.scene = QtGui.QGraphicsScene(self)
self.scene.setSceneRect(QtCore.QRectF(0, 0, 245, 245))
self.setScene(self.scene)
self.item = QtGui.QGraphicsEllipseItem(0, 0, 60, 40)
self.scene.addItem(self.item)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
view = MyView()
view.show()
sys.exit(app.exec_())
लेकिन अगर self.scene.setSceneRect(QtCore.QRectF(0, 0, 245, 245))
छोड़ दिया जाता है, तो अंडाकार के बीच में प्रकट होता है खिड़की के बावजूद खिड़की x, y = 0,0 है। मुझे यकीन नहीं है क्यों! क्या इस व्यवहार का कोई कारण है?
इसी तरह, दृश्य दृश्य आकार से बड़ा होने पर मैं स्क्रॉलबार की उपस्थिति के बारे में उलझन में हूं। उदाहरण के लिए, निम्न कोड कई इलिप्स के साथ दृश्य/दृश्य बनाता है, और itemsBoundingRect
sceneRect
से बड़ा है। केवल कुछ अंडाकार दिखाए जाते हैं, लेकिन छुपे हुए लोगों को देखने के लिए कोई स्क्रॉलबार नहीं है, आपको विंडो के आकार को बढ़ाना होगा। लेकिन जब आप ऐसा करते हैं, तो इलिप्स की शिफ्ट की जगह बदलती है, इसलिए इलिप्स के एक्स, वाई को नजरअंदाज कर दिया जाता है। self.scene.setSceneRect(QtCore.QRectF(0, 0, 200, 200))
लाइन छोड़ दिया जाता है
import sys
from PyQt4 import QtGui, QtCore
class MyView(QtGui.QGraphicsView):
def __init__(self):
QtGui.QGraphicsView.__init__(self)
self.setGeometry(QtCore.QRect(100, 100, 250, 250))
self.scene = QtGui.QGraphicsScene(self)
self.scene.setSceneRect(QtCore.QRectF(0, 0, 200, 200))
self.setScene(self.scene)
for i in range(5):
self.item = QtGui.QGraphicsEllipseItem(i*75, 10, 60, 40)
self.scene.addItem(self.item)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
view = MyView()
view.show()
sys.exit(app.exec_())
है, तो एक स्क्रॉलबार दिखाई देता है। लेकिन फिर, इलिप्स के एक्स, वाई पदों को नजरअंदाज कर दिया जाता है, और वे दृश्य में केंद्रित होते हैं।
जो मैं करने की कोशिश कर रहा हूं वह है: एक दृश्य बनाएं जहां आइटम उन्हें जाना चाहते हैं, और यदि आइटम की संख्या दृश्य आकार से बड़ी हो, तो स्क्रॉलबार दिखाई देने के लिए, लेकिन एक्स के लिए, ऑब्जेक्ट्स की वाई स्थिति बनाए रखने के लिए।
मुझे लगता है कि मैं दृश्य/दृश्य पहेली के कुछ महत्वपूर्ण टुकड़ा याद कर रहा हूँ ...
धन्यवाद @ जेफ। मैंने देखा है कि 'setGeometry' कॉल भी स्क्रॉलबार दिखाई देने पर एक भूमिका निभाता है। दूसरे उदाहरण में, स्क्रॉलबार तब दिखाई देते हैं जब 'सेट जीमेट्री' कहा जाता है लेकिन 'setSceneRect' _not_ कहा जाता है। स्वाभाविक रूप से, यदि न तो कहा जाता है, तो दृश्य स्वचालित रूप से सभी वस्तुओं को फिट करने के लिए समायोजित करता है ('आइटम्सबाउंडिंगरक्ट' के अनुरूप)। यदि _both_ कहा जाता है, तो केवल 'setSceneRect' द्वारा परिभाषित दृश्य दिखाया गया है, बिना स्क्रॉलबार के। – XandYandZ