最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何調(diào)整 QSCrollBar 的大小以在運(yùn)行時(shí)更改其寬度?

如何調(diào)整 QSCrollBar 的大小以在運(yùn)行時(shí)更改其寬度?

慕妹3242003 2023-12-12 21:34:12
我目前正在嘗試在 Qt (python) 中重現(xiàn) Window 10 開(kāi)始菜單滾動(dòng)條,但我不知道如何調(diào)整自定義 QScrollBar 的大小以在運(yùn)行時(shí)更改其寬度。我嘗試使用 QScrollBar.resize 方法(在 EnterEvent 和 LeaveEvent 中)調(diào)整它的大小,但它會(huì)在“繪圖區(qū)域”之外縮放小部件。例如,我的滾動(dòng)條設(shè)置為 QScrollArea,當(dāng)我嘗試調(diào)整它的大小時(shí),它不會(huì)占用更多空間并移動(dòng)小部件,而不是它只是在我看不到它的右側(cè)縮放。我目前找到的唯一解決方案是使用 StyleSheet,但我無(wú)法為其設(shè)置動(dòng)畫(huà)以實(shí)現(xiàn)我正在尋找的平滑調(diào)整大小。有一些代碼供您測(cè)試并查看問(wèn)題所在:from PySide2 import QtWidgets, QtCorefrom functools import partialclass MyTE(QtWidgets.QPlainTextEdit):        def __init__(self):        super(MyTE, self).__init__()                self.setVerticalScrollBar(MyScrollBar(self))        self.setPlainText('mmmmmmmmmmmmmmmmmmmmmmmmmmmmm'*50)        class MyScrollBar(QtWidgets.QScrollBar):        def __init__(self, parent=None):        super(MyScrollBar, self).__init__(parent=parent)        self.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)                    def enterEvent(self, event):        super(MyScrollBar, self).enterEvent(event)                self.resize(QtCore.QSize(4, self.height()))            def leaveEvent(self, event):        super(MyScrollBar, self).leaveEvent(event)                self.resize(QtCore.QSize(10, self.height()))        wid = MyTE()wid.show()
查看完整描述

2 回答

?
天涯盡頭無(wú)女友

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊

.0我終于找到了如何在不使用樣式表的情況下做到這一點(diǎn)!感謝 eyllanesc 的回答,它給了我一個(gè)新的工作基礎(chǔ),我終于明白了 Qt 如何處理調(diào)整大?。ㄎ也拢?,我在setFixedSize每次動(dòng)畫(huà)值發(fā)生變化時(shí)使用名為 的方法。


為了工作,這需要有一個(gè)重寫(xiě)的sizeHint方法來(lái)返回動(dòng)畫(huà)的寬度值。此外,這適用于 Autodesk Maya(不幸的是,eyllanesc 提供的解決方案在 Maya 中不起作用,原因未知)。


我的解決方案是:


from PySide2 import QtWidgets, QtCore, QtGui



class MyTE(QtWidgets.QPlainTextEdit):

    def __init__(self):

        super(MyTE, self).__init__()


        self.setVerticalScrollBar(MyScrollBar(self))


        self.setPlainText("mmmmmmmmmmmmmmmmmmmmmmmmmmmmm" * 50)

        self.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)


    def resizeEvent(self, event):

        super(MyTE, self).resizeEvent(event)



class MyScrollBar(QtWidgets.QScrollBar):

    

    def __init__(self, parent=None):

        super(MyScrollBar, self).__init__(parent=parent)


        self._animation = QtCore.QVariantAnimation(

            startValue=10.0, endValue=25.0, duration=300

        )

        self._animation.valueChanged.connect(self.changeWidth)


        self._width = 10


    def enterEvent(self, event):

        super(MyScrollBar, self).enterEvent(event)

        self._animation.setDirection(QtCore.QAbstractAnimation.Forward)

        self._animation.start()


    def leaveEvent(self, event):

        super(MyScrollBar, self).leaveEvent(event)

        self._animation.setDirection(QtCore.QAbstractAnimation.Backward)

        self._animation.start()


    def sizeHint(self):

        """This must be overrided and return the width processed by the animation

        .. note:: In my final version I've replaced self.height() with 1 because it does not change 

        anything but self.height() was making my widget grow a bit each time.

        """

        return QtCore.QSize(self._width, self.height())


    def changeWidth(self, width):

        self._width = width  # This will allow us to return this value as the sizeHint width

        self.setFixedWidth(width) # This will ensure to scale the widget properly.



if __name__ == "__main__":


    app = QtWidgets.QApplication()

    wid = MyTE()

    wid.show()

    app.exec_()

注意:QVariantAnimation 的 startValue 和 endValue 必須是 float,如果它們是 int 類(lèi)型,則動(dòng)畫(huà)將不起作用(適用于 Qt 5.6.1 (Maya 2018),但不適用于 Qt 5.12.5 (Maya 2020)


PS:如果有人對(duì)我的最終小部件(Window 10 開(kāi)始菜單滾動(dòng)條)感興趣,請(qǐng)私下詢(xún)問(wèn)我。


查看完整回答
反對(duì) 回復(fù) 2023-12-12
?
料青山看我應(yīng)如是

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊

為了使寬度變化更平滑,您可以使用QVariantAnimation:


from PySide2 import QtWidgets, QtCore



class MyTE(QtWidgets.QPlainTextEdit):

    def __init__(self):

        super(MyTE, self).__init__()


        self.setVerticalScrollBar(MyScrollBar(self))


        self.setPlainText("mmmmmmmmmmmmmmmmmmmmmmmmmmmmm" * 50)



class MyScrollBar(QtWidgets.QScrollBar):

    def __init__(self, parent=None):

        super(MyScrollBar, self).__init__(parent=parent)

        self._animation = QtCore.QVariantAnimation(

            startValue=10, endValue=25, duration=500

        )

        self._animation.valueChanged.connect(self.change_width)


    def enterEvent(self, event):

        super(MyScrollBar, self).enterEvent(event)

        self._animation.setDirection(QtCore.QAbstractAnimation.Forward)

        self._animation.start()


    def leaveEvent(self, event):

        super(MyScrollBar, self).leaveEvent(event)

        self._animation.setDirection(QtCore.QAbstractAnimation.Backward)

        self._animation.start()


    def change_width(self, width):

        self.setStyleSheet("""QScrollBar:vertical{ width: %dpx;}""" % (width,))



if __name__ == "__main__":


    app = QtWidgets.QApplication()

    wid = MyTE()

    wid.show()

    app.exec_()


查看完整回答
反對(duì) 回復(fù) 2023-12-12
  • 2 回答
  • 0 關(guān)注
  • 465 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)