Jak zrobić QListView, albo inny rodzaj listy który ma resize'owalny rozmiar?

0

Chciałbym zrobić jakas konstrukcję GUI w PyQT w którym mogę mieć szereg elementów (pionowy, jak w liście), w którym mógłbym rozszerzać osobno elementy przez drag and drop.

Złapać jakiś element, i po prostu zmienić jego rozmiar. Elementy pod nim nie powinny zmienić rozmiaru.

0
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
from threading import *
import time

class MovingButton(QPushButton):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.parentWindow = args[1]
        self.pressed = False

    def thread(self):
        t = Thread(target=self.updateCoordinates)
        t.start()
    
    def updateCoordinates(self):
        while self.pressed:
            x,y,w,h = self.geometry().getRect()

            new_x = QCursor.pos().x() - self.parentWindow.geometry().getRect()[0]
            new_y = QCursor.pos().y() - self.parentWindow.geometry().getRect()[1]
            
            x = new_x - w//2
            y = new_y - h//2
            self.setGeometry(x, y, w, h)
            time.sleep(0.01)

    def mousePressEvent(self, event):
        self.pressed = True
        self.thread()

    def mouseReleaseEvent(self, event):
        self.pressed = False



class Window(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Window")
        self.setMouseTracking(True)

        self.setGeometry(200, 20, 800, 800)

        
        self.label = QLabel('label', self)
        self.label.setGeometry(500, 500, 30, 50)

        self.button = MovingButton('button', self)
        self.button.setGeometry(200, 300, 40, 50)
   
        self.show()

App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec())

W sumie za pomocą atrybutu setGeometry można ustawiać położenie, x,y i szerokość wysokość elementu, dowolnie po surfacie można latać elementami jak się chce.

0

Kod zaprezentowany wyżej, pomijajac już to że to jest mega hack i mega nieutrzymywalne rozwiązanie; to prezentuje coś całkowicie innego.

Kod z góry to tak na prawdę jest drag&drop do przesuwania elementów. Nie wiem zupełnie w jaki sposób się to ma do stworzenia listy który ma resize'owalne elementy (i resize'owalne tylko w górę i w dół, a nie lewo/prawo). Także Panu z góry już dziekujemy za udział w wątku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1