resimde gördüğünüz gibi kırmızı ile işaretli + butonuna basınca 1 adet buton1 oluşturmasını istiyorum , bu işlem tekrarlanınca altına 1 tane daha oluşturmasını bu işlem tekrarlandığı sürece alt alta böyle devam etmesini istiyorum aynı zamanda yeşil ile işaretli yerdeki butona basınca butonu silmesini açık mavi ile işaretli yere basınca butonun işlevlerini devre dışı bırakmasını koyu mavi ile işaretli yere basınca seçili butonun sıralamasını yukarı alması gibi şeyler yapıcam nasıl bir yol izliyebilirim konu hakkıda fazla kaynak bulamadım şimdiden çok teşekkürler
İstediğiniz özelliklerin tamamını yapdım. Taşıma işlemleri sorun çıkarıyor, bir widget olduğu için direkt taşınmıyor,yeniden tanimlamam gerekdi.
QListWidget kullandim. ama belki QTableWidget kullanarak da yapıla bilir.
from PyQt5.QtWidgets import QWidget,QListWidget,QListWidgetItem,QPushButton,QHBoxLayout,QVBoxLayout,QApplication
class Pencere(QWidget):
def __init__(self):
super().__init__()
self.setFixedSize(300,600)
self.ui()
self.bt_numarasi = 1
def ui(self):
BT_ekle = QPushButton('+')
BT_ekle.clicked.connect( self.bt_ekle )
BT_sil = QPushButton('-')
BT_sil.clicked.connect( self.bt_sil )
BT_devre_disi = QPushButton('x')
BT_devre_disi.clicked.connect(self.bt_devre_disi_birak)
BT_yukari = QPushButton('<')
BT_yukari.clicked.connect(self.bt_yukari_tasi) # doğru çalışmıyor
BT_asagi = QPushButton('>')
BT_asagi.clicked.connect(self.bt_asagi_tasi) # doğru çalışmıyor
self.LW_list = QListWidget()
self.LW_list.setStyleSheet('QListWidget::item:selected { background: red; }')
hbox_BT = QHBoxLayout()
hbox_BT.addWidget( BT_ekle )
hbox_BT.addWidget( BT_sil )
hbox_BT.addWidget( BT_devre_disi )
hbox_BT.addWidget( BT_yukari )
hbox_BT.addWidget( BT_asagi )
vbox = QVBoxLayout()
vbox.addLayout(hbox_BT)
vbox.addWidget(self.LW_list)
self.setLayout(vbox)
def bt_ekle(self):
item = QListWidgetItem()
bt = QPushButton( f'Button {self.bt_numarasi}' )
bt.setObjectName( f'bt_{self.bt_numarasi}' )
bt.clicked.connect(self.bt_click)
item.setSizeHint(bt.sizeHint())
self.LW_list.addItem(item)
self.LW_list.setItemWidget(item, bt)
self.bt_numarasi += 1
def bt_click(self):
#hangi button-a tıkladığımızı yakalamak için
bt_obj_name = self.sender().objectName()
print(bt_obj_name,' tiklandı')
def bt_sil(self):
row = self.LW_list.currentRow()
if row != -1: # her hangi bir satır seçilmezse -1 döndürür ve silme gerçekleşmez
self.LW_list.takeItem(row)
def bt_devre_disi_birak(self):
# seçili buttona bir kez tikladiğinda devre dişi kalır, bir kez daha tikladiğinda yeniden aktiv olur
row = self.LW_list.currentRow()
if row != -1:
item = self.LW_list.item(row)
bt = self.LW_list.itemWidget(item)
if bt.isEnabled():
bt.setEnabled(False)
else:
bt.setEnabled(True)
self.LW_list.setItemWidget(item,bt)
def bt_yukari_tasi(self):
# bu kısmı biraz uzun yoldan yapmalı oldum.Buttonu yeniden tanimlamam gerekdi.Çünki eski gözükmüyor, sorun yaratıyor
row= self.LW_list.currentRow()
if row != -1:
item_old = self.LW_list.item(row)
bt_old = self.LW_list.itemWidget(item_old)
obj_name = bt_old.objectName()
bt_new =QPushButton(f"Button {obj_name.split('_')[1]}")
bt_new.setObjectName(obj_name)
bt_new.clicked.connect(self.bt_click)
self.LW_list.takeItem(row)
item = QListWidgetItem()
item.setSizeHint(bt_new.sizeHint())
self.LW_list.insertItem(row - 1, item)
self.LW_list.setItemWidget(item, bt_new)
def bt_asagi_tasi(self):
row = self.LW_list.currentRow()
if row != -1:
item_old = self.LW_list.item(row)
bt_old = self.LW_list.itemWidget(item_old)
obj_name = bt_old.objectName()
bt_new =QPushButton(f"Button {obj_name.split('_')[1]}")
bt_new.setObjectName(obj_name)
bt_new.clicked.connect(self.bt_click)
self.LW_list.takeItem(row)
item = QListWidgetItem()
item.setSizeHint(bt_new.sizeHint())
self.LW_list.insertItem(row + 1, item)
self.LW_list.setItemWidget(item, bt_new)
if __name__ == '__main__':
app = QApplication([])
pen = Pencere()
pen.show()
app.exec()
1 Beğeni