bằng PyQt, tôi đang cố gắng tạo giao diện mà tôi có thể thêm hoặc xóa tiện ích động. Tôi muốn xác định một lớp riêng biệt cho tiện ích con sẽ được thêm hoặc xóa. Tôi dường như không thể nhận được tiện ích mà tôi nhanh chóng hiển thị bên trong giao diện chính. Đây là mã tôi đang sử dụng:tự động thêm và xóa tiện ích trong PyQt
from PyQt4 import QtGui, QtCore
import sys
class Main(QtGui.QMainWindow):
def __init__(self, parent = None):
super(Main, self).__init__(parent)
# central widget
self.centralWidget = QtGui.QWidget(self)
# main layout
self.vLayout = QtGui.QVBoxLayout(self.centralWidget)
# main button
self.pButton_add = QtGui.QPushButton(self.centralWidget)
self.pButton_add.setText('button to add other widgets')
# scroll area
self.scrollArea = QtGui.QScrollArea(self.centralWidget)
self.scrollArea.setWidgetResizable(True)
# scroll area widget contents
self.scrollAreaWidgetContents = QtGui.QWidget(self.scrollArea)
# scroll area widget contents - layout
self.formLayout = QtGui.QFormLayout(self.scrollAreaWidgetContents)
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
# add all main to the main vLayout
self.vLayout.addWidget(self.pButton_add)
self.vLayout.addWidget(self.scrollArea)
# set central widget
self.setCentralWidget(self.centralWidget)
# connections
self.pButton_add.clicked.connect(self.addWidget)
def addWidget(self):
z = Test(self.scrollAreaWidgetContents)
count = self.formLayout.rowCount()
self.formLayout.setWidget(count, QtGui.QFormLayout.LabelRole, z)
class Test(QtGui.QWidget):
def __init__(self, parent):
super(Test, self).__init__(parent)
self.pushButton = QtGui.QPushButton(self)
app = QtGui.QApplication(sys.argv)
myWidget = Main()
myWidget.show()
app.exec_()
điều là, khi tôi sử dụng mã dưới đây vào trong phương pháp 'addWidget' của tôi, nó chính xác những gì tôi muốn nó phải làm, nhưng phương pháp lớp không dường như hoạt động.
z = QtGui.QPushButton(self.scrollAreaWidgetContents)
count = self.formLayout.rowCount())
self.formLayout.setWidget(count, QtGui.QFormLayout.LabelRole, z)
Tôi tự hỏi tại sao z = Test() không sinh ra bất kỳ kết quả nào? Bất kỳ ý tưởng? Cảm ơn!
Cảm ơn câu trả lời chi tiết! Lý do tôi sử dụng Form Layout là tôi muốn các widget bắt đầu xuất hiện ở phía trên cùng của vùng cuộn và điền vào các vị trí trống từ đó, thay vì xuất hiện ở giữa và sắp xếp lại chúng như các widget mới được tạo ra. Mặc dù tôi chắc chắn có những cách khác để làm điều đó, formlayout có vẻ như một giải pháp dễ dàng cho tôi .. Cảm ơn một lần nữa! – boundless
@boundless: Ah, tôi hiểu rồi. Cách tiếp cận của tôi với điều đó sẽ được gói 'scrollLayout' trong một' QVBoxLayout' khác với một đoạn '1' được thêm vào bên dưới. Điều đó sẽ giữ mọi thứ ở trên cùng. – Avaris
một điều khác mà tôi thích formlayout cho là, nó làm cho nó dễ dàng hơn để có hai vật dụng bên cạnh nhau cũng như giữ mọi thứ ở đầu .. Mặc dù có lẽ vào thời điểm đó, tôi chỉ nên sử dụng bố trí lưới. Cảm ơn một lần nữa vì gợi ý! – boundless