2017-09-16 12 views
0

PyQt4では、機能が完了するまでウィンドウのサイズを一時停止する方法はありますか?PyQt GUIリサイズイベントの前に機能を実行する方法

私の問題は、大量のテキストが含まれている可能性のあるテキスト編集ウィンドウを作成したことです。私はグリッドレイアウトの作業に切り替えたので、テキストの編集も同様にサイズが変更され、多くのテキストがあると、アプリケーションがハングします。私はサイズ変更時にテキストをクリアするためにresizeEventをオーバーライドしようとしましたが、サイズ変更後にテキストをクリアしているので、アプリケーションはまだハングします。

その他の解決策も歓迎されます。

Pythonコード(及び.uiファイルへのリンク):

import sys 
from PyQt4 import QtGui, uic, QtCore 
from PyQt4.QtGui import QDesktopWidget 

qtCreatorMainWindowFile = "mainwindow.ui" 
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorMainWindowFile) 


class MainWindow(QtBaseClass, Ui_MainWindow): 
    def __init__(self): 
     QtBaseClass.__init__(self) 
     self.setupUi(self) 
     # Set window size to 4/5 of the screen dimensions 
     sg = QDesktopWidget().screenGeometry() 
     self.resize(sg.width()*4/5, sg.height()*4/5) 

     self.clearTextBrowserButton.clicked.connect(self.ClearTextBrowsers) 

     @staticmethod 
     def WriteToTextBrowser(string, text_browser): 
      cursor = text_browser.textCursor() 
      cursor.movePosition(QtGui.QTextCursor.End) 
      cursor.insertText(string) 
      text_browser.setTextCursor(cursor) 
      text_browser.ensureCursorVisible() 

     def ClearTextBrowsers(self): 
      self.textBrowser.clear() 

     # def resizeEvent(self,event): 
      # print "resize" 
      # self.ClearTextBrowsers() 

app = QtGui.QApplication(sys.argv) 
window = MainWindow() 
window.show() 

for i in range(1,100000): 
    window.WriteToTextBrowser("TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST\r\n",window.textBrowser) 

sys.exit(app.exec_()) 

UI。ファイル: https://www.dropbox.com/s/y3hxp6mjhfpv2hy/mainwindow.ui?dl=0

+0

1つのオプションは、ウィンドウをリサイズ避けるためかもしれませんか? – eyllanesc

+0

残念ながら、それはグリッドレイアウトへの切り替えの全ポイントでした。 – sas

+0

@sas解決策を見つけたら、回答として公開することをお勧めします。 – eyllanesc

答えて

0

私はこれまでのところうまくいくと思われる回避策を見つけました。私は "移動"または "WindowStateChange" QEventsをキャッチするイベントフィルタを追加しました。これらは実際のサイズ変更の前に発生するように見えます(以前のクリックとストレッチの動作、後者の最大化/最小化)。欠点は、単にウィンドウを動かすだけでテキスト編集がクリアされることですが、それは私が支払うことになる価格です。

(メインウィンドウ内)を追加コード:

self.installEventFilter(self) 

def eventFilter(self, source, event): 
    if (event.type() == QtCore.QEvent.Move or event.type() == QtCore.QEvent.WindowStateChange): 
     self.file.write(self.textBrowser.toPlainText()) 
     self.ClearTextBrowsers() 
    return QtBaseClass.eventFilter(self, source, event) 
関連する問題