मैं एक कॉन्फ़िगरेशन फ़ाइल बनाने की कोशिश कर रहा हूं जिसमें बंद होने पर विंडो आकार, स्थिति और स्थिति के बारे में जानकारी होगी। फिर से खोलते समय इसे उस जानकारी के आधार पर पुनर्प्राप्त करना चाहिए। इसलिए मैं इस फ़ंक्शन को ट्रिगर करने के लिए closeEvent का उपयोग कर रहा हूं:

cfg = ConfigParser()            # create config object   
def saveConfig(gui):
    winW = gui.centralwidget.frameGeometry().width()        # width of window
    winH = gui.centralwidget.frameGeometry().height()       # height of window
    
    cfg['window'] = {}                                      # window settings
    window = cfg['window']
    window['size'] = f"{winW},{winH}"                       # save current window size
    window['pos'] = f"{gui.x()},{gui.y()}"                  # save current window position
    
    with open(CONFIG_PATH, 'w') as file:                    # write config to file
         cfg.write(file)

लोडकॉन्फिग फ़ंक्शन यहां दिया गया है:

def loadConfig(gui):
    cfg.read(CONFIG_PATH)       # read config from CONFIG_PATH

    if 'window' in cfg:         # window settings
        window = cfg['window']    
        size = window.get('size').split(',')
        pos = window.get('pos').split(',')
        gui.resize(int(size[0]), int(size[1]))  # resize window to saved size
        gui.move(int(pos[0]), int(pos[1]))      # move window to save position
    else:
        gui.resize(1110,783)
        gui.move(398,94)

हालाँकि, यदि विंडो अधिकतम होने के दौरान बंद है, तो यह लॉन्च के बाद फिर से अधिकतम नहीं दिखाई देती है। बस उसी आकार और स्थिति में।

मैंने पढ़ा है कि आप विंडोस्टेट() प्राप्त कर सकते हैं। फिर इसकी तुलना करना आसान होगा यदि यह Qt.WindowMaximized है लेकिन जब मैं print(gui.centralwidget.windowState() का उपयोग करता हूं तो यह <PyQt5.QtCore.Qt.WindowStates object at 0x000001E7B1DBF970> देता है। कोई विचार?

0
JackPieCZ 23 पद 2020, 16:05
क्या saveGeometry() का उपयोग न करने का कोई विशेष कारण है और restoreGeometry()?
 – 
musicamante
23 पद 2020, 16:17
नहीं, मैं बस इस पर अधिक नियंत्रण रखना चाहूंगा। लेकिन शायद यह उस तरह का अनावश्यक जटिल है ...
 – 
JackPieCZ
23 पद 2020, 16:19
1
मुझे नहीं पता कि "अधिक नियंत्रण" से आपका क्या मतलब है, क्योंकि वे कार्य पहले से ही वह सब प्रदान करते हैं जो आप प्राप्त करने की कोशिश कर रहे हैं (और इससे भी अधिक)। साथ ही, resize() और move() पर अलग-अलग कॉल का उपयोग करने के बजाय, आमतौर पर इसके बजाय सीधे setGeometry() का उपयोग करना बेहतर होता है
 – 
musicamante
23 पद 2020, 16:36

1 उत्तर

सबसे बढ़िया उत्तर

सभी क्यूटी एनम और झंडे पूर्णांक या बिटवाइज मान हैं, इसलिए उन्हें आसानी से "पठनीय" प्रारूप में परिवर्तित किया जा सकता है:

    state = int(self.windowState())

बिटवाइज़ ऑपरेटरों का उपयोग करके, संख्यात्मक मान को जाने बिना भी झंडे की सीधे तुलना की जा सकती है:

    isMaximized = self.windowState() & QtCore.Qt.WindowMaximized

ध्यान दें कि यदि आप किसी विशिष्ट स्थिति को जानना चाहते हैं तो आप केवल संबंधित सुविधा कार्यों को कॉल कर सकते हैं: isMaximized(), isMinimized() और isFullScreen() .

अंत में, याद रखें कि Qt पहले से ही saveGeometry() और < a href="https://doc.qt.io/qt-5/qwidget.html#restoreGeometry" rel="nofollow noreferrer">restoreGeometry(), जो न केवल विंडो की ज्योमेट्री को स्टोर करता है , लेकिन स्क्रीन नंबर और ज्यामिति भी जिस पर विजेट वर्तमान में है, जो यह सुनिश्चित करता है कि विंडो को यथासंभव पुनर्स्थापित किया जाएगा, जबकि यह सुनिश्चित करते हुए कि यह हमेशा दिखाई दे, भले ही स्क्रीन सेटअप बदल गया हो .

1
musicamante 23 पद 2020, 16:35