如何在pyqt5中将按钮移动到另一个框架?

问题描述 投票:0回答:1

有两个框架包含按钮。

何时单击左框中的按钮,单击按钮移动到右框。

如何将按钮移动到pyqt中的另一个框架?

def create_widget(self):

    left_frame = QFrame(self)
    left_frame.setFixedWidth(300)
    left_frame.setFixedHeight(400)
    left_frame.move(0, 0)


    for x in range(10):
        btn = QPushButton('button', left_frame)
        btn.setFixedWidth(50)
        btn.setFixedHeight(20)
        btn.move(5, 0+(30*x))
        btn.clicked.connect(self.click_btn_add)


    right_frame = QFrame(self)
    right_frame.setFixedWidth(300)
    right_frame.setFixedHeight(400)
    right_frame.move(400, 0)


def click_btn_add(self):
    # How to move button to another frame?
python pyqt pyqt5
1个回答
0
投票

小部件的位置是相对于父级的,这很清楚,因为按钮的父级为self.left_frame,并且它们的位置是相对于它的。如果你想让它移动到另一个QFrame,你只需要用QFrame将另一个父级设置为另一个setParent(),并使用show()使其可见(当更改父级时,隐藏小部件)。要获得插槽中的按钮,我们将使用sender()返回发出信号的对象,在这种情况下,它是按钮。在下面我将使每次按下按钮它将移动到另一个QFrame

import sys

from PyQt5.QtWidgets import *

class Widget(QWidget):
    def __init__(self, *args, **kwargs):
        QWidget.__init__(self, *args, **kwargs)
        self.create_widget()

    def create_widget(self):
        self.left_frame = QFrame(self)
        self.left_frame.setFixedSize(300, 400)
        self.left_frame.move(0, 0)

        self.right_frame = QFrame(self)
        self.right_frame.setFixedSize(300, 400)
        self.right_frame.move(400, 0)

        for x in range(10):
            btn = QPushButton('button', self.left_frame)
            btn.setFixedSize(50, 20)
            btn.move(5, 30*x)
            btn.clicked.connect(self.click_btn_add)

    def click_btn_add(self):
        btn = self.sender()
        new_parent = self.right_frame if btn.parent() == self.left_frame else self.left_frame
        btn.setParent(new_parent)
        btn.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())
© www.soinside.com 2019 - 2024. All rights reserved.