python - QTableWidget संकेत कक्ष परिवर्तित(): उपयोगकर्ता इनपुट और रूटीन द्वारा परिवर्तन के बीच भेद




pyqt signals (2)

मैं PyQt का उपयोग कर रहा हूँ लेकिन मेरा प्रश्न एक सामान्य क्यूटी है:

मेरे पास QTableWidget है जो फ़ंक्शन updateTable द्वारा सेट किया गया है यह आंकड़े डेटा को तालिका में लिखते हैं जब इसे कहा जाता है। दुर्भाग्य से यह मेरे क्यूटेबलविड्ट को हर सेल के लिए सिग्नल सेल परिवर्तित () फेंकने का कारण बनता है।

सिग्नल सेल-चेंग्ड () एक समारोह से जुड़ा है on_tableWidget_cellChanged जो कि परिवर्तित सेल की सामग्री को पढ़ता है और इसे वापस DATASET पर लिखता है। उपयोगकर्ता को मैन्युअल रूप से डेटा बदलने की अनुमति देना आवश्यक है।

इसलिए हर बार तालिका अपडेट हो चुकी है, इसकी सामग्री वापस DATASET पर लिखी जाती है।

अगर उपयोगकर्ता द्वारा या अपडेट के द्वारा सेल बदल दिया गया था, तो क्या इसमें अंतर करने का एक तरीका है?

मैंने सोचा था कि on_tableWidget_cell को डिस्कनेक्ट करना अपडेट करके बदल दिया गया था अस्थायी रूप से लेकिन यह थोड़ा गंदी लगता है


ऐसा लगता है, यह QTableWidget में कम से कम 4.6 के लिए एकमात्र संकेत है। आप एक सुविधा अनुरोध पोस्ट कर सकते हैं, लेकिन मुझे नहीं पता कि यह स्वीकार किया गया है और आप लंबे समय तक प्रतीक्षा कर सकते हैं ;-)

हो सकता है कि आप QTableWidget के एक उपवर्ग को लिखने का प्रयास कर सकें और अपने सिग्नल का उत्सर्जन कर सकें, जब सेल को आंतरिक रूप से बदला जाए

फिर भी, सेल को अपडेट करने के समय के लिए डिस्कनेक्ट करना बुरा नहीं है, क्योंकि आप विशिष्ट संकेत से कनेक्ट नहीं कर सकते हैं।


मैं एक QTableView से एक उचित मॉडल के साथ एक QTableView बदलने की सिफारिश करेंगे। इसकी आवाज़ से, आपके पास एक डाटाबेस या अन्य डाटा ऑब्जेक्ट है जो किसी भी तरह से डेटा को व्यवस्थित और व्यवस्थित कर रहा है, इसलिए यह उम्मीद करना काफी आसान होगा। इससे आप संपादन ( setData को आपके मॉडल पर कहा जाता है) और अपडेट्स ( data को आपके मॉडल पर कहा जाता है) के बीच अंतर करने की अनुमति देगा।