6

プログラムの現在のステータスを書き込むことができるラベルを作成しようとしています - 例:

「データを読み込んでいます...」

「データを処理しています...」

"完了。"

テキストがラベルの下部に達すると、テキストと共に自動的にスクロールして、最新のメッセージが表示されるようにします (コンソール ウィンドウのように)。私はラベルとスクロールエリアを1時間以上いじっています...そして役に立ちません。ラベルをスクロールエリア内に配置しようとしました(これは、ここで関連する回答が示唆しているようです)-このコードはQt Designerから生成されます:

class Ui_Dialog(object):
def setupUi(self, Dialog):
    Dialog.setObjectName(_fromUtf8("Dialog"))
    Dialog.resize(218, 137)
    self.frame = QtGui.QFrame(Dialog)
    self.frame.setGeometry(QtCore.QRect(209, 399, 161, 111))
    self.frame.setFrameShape(QtGui.QFrame.StyledPanel)
    self.frame.setFrameShadow(QtGui.QFrame.Raised)
    self.frame.setObjectName(_fromUtf8("frame"))
    self.scrollArea = QtGui.QScrollArea(Dialog)
    self.scrollArea.setGeometry(QtCore.QRect(10, 10, 201, 121))
    self.scrollArea.setWidgetResizable(True)
    self.scrollArea.setObjectName(_fromUtf8("scrollArea"))
    self.scrollAreaWidgetContents = QtGui.QWidget()
    self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 199, 119))
    self.scrollAreaWidgetContents.setObjectName(_fromUtf8("scrollAreaWidgetContents"))
    self.label = QtGui.QLabel(self.scrollAreaWidgetContents)
    self.label.setGeometry(QtCore.QRect(15, 10, 151, 101))
    self.label.setWordWrap(True)
    self.label.setObjectName(_fromUtf8("label"))
    self.scrollArea.setWidget(self.scrollAreaWidgetContents)

    self.retranslateUi(Dialog)
    QtCore.QMetaObject.connectSlotsByName(Dialog)

メインの .pyw ファイルには次が含まれます。

import sys
from gui_test import *

class MyForm(QtGui.QDialog):

    def __init__(self,parent=None):

        QtGui.QWidget.__init__(self,parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)

        self.ui.label.setText("Warning: When passing a QString to the constructor or calling setText(), make sure to sanitize your input, as QLabel tries to guess whether it displays the text as plain text or as rich text, a subset of HTML 4 markup. You may want to call setTextFormat() explicitly, e.g. in case you expect the text to be in plain format but cannot control the text source (for instance when displaying data loaded from the Web).")

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = MyForm()
    myapp.show()
    sys.exit(app.exec_())

また、すべてのテキストが表示されているわけではありませんが、スクロールエリアにはスクロールバーがありません。スクロールバーを常にオンにすると、グレー表示になり、スクロールするテキストがないと思われることが示唆されます。

誰かがここで私を助けてくれたら、本当に感謝しています。

4

1 に答える 1

15

解決策 1: コード内

(Ui_Dialogで)変更すると、それを「機能させる」ことができることがわかりました:

self.scrollArea.setWidget(self.scrollAreaWidgetContents)

self.scrollArea.setWidget(self.label)

QtDesigner が機能しないコードを作成した理由がわかりません。また、コードが機能しないように見えるのに、なぜそのコードが機能しなかったのか完全には理解できません。self.label は親として self.scrollAreaWidgetContents を持っていたので、接続はそこにあるようです。

したがって、私は QtDesigner で何か間違ったことをしており、これが機能するコードのエクスポートを妨げていると推測しています。

解決策 2: QT デザイナーで

さて、次のようにすれば、QtDesignerで機能させることができることがわかりました。

(1) ScrollArea を作成する [この時点で ScrollArea のレイアウトを設定することはできません]

(2) ScrollArea 内に Label を配置する

(3) ScrollArea を右クリックし、そのレイアウトを設定します (例: 水平レイアウト)。

(4) 輸出

これはうまくいくようです。ただし、次のことを行うと機能しません。

(1) ScrollArea を作成する

(2) ScrollArea にレイアウトを配置する (例: 水平レイアウト)

(3) レイアウト内にラベルを配置する

(4) 輸出

ここで何が起こっているのか正確にはわかりませんが、それでも、これら問題に対する 2 つの解決策です。

于 2013-06-30T18:07:45.777 に答える