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

时间:2018-03-05 06:24:22

标签: python pyqt pyqt5

有两个框架包含按钮。

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

如何在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?

1 个答案:

答案 0 :(得分: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_())