0

在 PyQt4 中,有没有办法暂停调整窗口的大小,直到函数完成?

我的问题是我创建了一个带有可能包含大量文本的文本编辑的窗口。由于我切换到使用网格布局,文本编辑也会调整大小,当有很多文本时,应用程序会挂起。我尝试覆盖 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_())

用户界面。文件: https ://www.dropbox.com/s/y3hxp6mjhfpv2hy/mainwindow.ui?dl=0

4

1 回答 1

0

我找到了一个到目前为止似乎有效的解决方法。我添加了一个捕获“Move”或“WindowStateChange”QEvents 的事件过滤器。这些似乎发生在实际调整大小之前(之前的工作用于单击和拉伸,后者用于最大化/最小化)。缺点是简单地移动窗口会清除文本编辑,但这是我愿意付出的代价。

添加的代码(在 MainWindow 内):

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)
于 2017-09-16T19:11:51.777 回答