You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
169 lines
5.3 KiB
169 lines
5.3 KiB
import sys
|
|
|
|
from PyQt5 import QtCore, QtWidgets
|
|
|
|
|
|
class Disco(QtWidgets.QFrame):
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.artista = QtWidgets.QLineEdit()
|
|
self.titolo = QtWidgets.QLineEdit()
|
|
layout = QtWidgets.QFormLayout(self)
|
|
layout.addRow('Artista', self.artista)
|
|
layout.addRow('Titolo', self.titolo)
|
|
|
|
def setData(self, data):
|
|
self.artista.setText(data.get('artista', ''))
|
|
self.titolo.setText(data.get('titolo', ''))
|
|
|
|
def getData(self):
|
|
return {'artista': self.artista.text(), 'titolo': self.titolo.text()}
|
|
|
|
|
|
class Canzoni(QtWidgets.QFrame):
|
|
def __init__(self):
|
|
super().__init__()
|
|
layout = QtWidgets.QVBoxLayout(self)
|
|
self.table = QtWidgets.QTableWidget(0, 2)
|
|
self.table.setHorizontalHeaderLabels(('Titolo', 'Durata'))
|
|
layout.addWidget(self.table)
|
|
self.addButton = QtWidgets.QPushButton('Aggiungi')
|
|
layout.addWidget(self.addButton)
|
|
self.addButton.clicked.connect(lambda:
|
|
self.table.insertRow(self.table.rowCount()))
|
|
|
|
def setData(self, data):
|
|
self.table.clearContents()
|
|
canzoni = data.get('canzoni', [])
|
|
self.table.setRowCount(len(canzoni))
|
|
for row, (titolo, durata) in enumerate(canzoni):
|
|
self.table.setItem(row, 0, QtWidgets.QTableWidgetItem(titolo))
|
|
durataItem = QtWidgets.QTableWidgetItem()
|
|
durataItem.setData(QtCore.Qt.DisplayRole, int(durata))
|
|
self.table.setItem(row, 1, durataItem)
|
|
|
|
def getData(self):
|
|
canzoni = []
|
|
for row in range(self.table.rowCount()):
|
|
canzoni.append([
|
|
self.table.item(row, 0).text(),
|
|
self.table.item(row, 1).data(QtCore.Qt.DisplayRole),
|
|
])
|
|
return {'canzoni': canzoni}
|
|
|
|
|
|
class Strumenti(QtWidgets.QFrame):
|
|
def __init__(self):
|
|
super().__init__()
|
|
layout = QtWidgets.QVBoxLayout(self)
|
|
self.table = QtWidgets.QTableWidget(0, 2)
|
|
layout.addWidget(self.table)
|
|
self.table.setHorizontalHeaderLabels(('Artista', 'Strumenti'))
|
|
self.table.verticalHeader().hide()
|
|
self.addButton = QtWidgets.QPushButton('Aggiungi')
|
|
layout.addWidget(self.addButton)
|
|
self.addButton.clicked.connect(lambda:
|
|
self.table.insertRow(self.table.rowCount()))
|
|
|
|
def setData(self, data):
|
|
self.table.clearContents()
|
|
strumenti = data.get('strumenti', [])
|
|
self.table.setRowCount(len(strumenti))
|
|
for row, (artista, strumento) in enumerate(strumenti):
|
|
self.table.setItem(row, 0, QtWidgets.QTableWidgetItem(artista))
|
|
self.table.setItem(row, 1, QtWidgets.QTableWidgetItem(strumento))
|
|
|
|
def getData(self):
|
|
strumenti = []
|
|
for row in range(self.table.rowCount()):
|
|
strumenti.append([
|
|
self.table.item(row, 0).text(),
|
|
self.table.item(row, 1).text(),
|
|
])
|
|
return {'strumenti': strumenti}
|
|
|
|
|
|
class MainWindow(QtWidgets.QMainWindow):
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.stackWidget = QtWidgets.QStackedWidget()
|
|
self.setCentralWidget(self.stackWidget)
|
|
|
|
self.disco = Disco()
|
|
self.stackWidget.addWidget(self.disco)
|
|
|
|
self.canzoni = Canzoni()
|
|
self.stackWidget.addWidget(self.canzoni)
|
|
|
|
self.strumenti = Strumenti()
|
|
self.stackWidget.addWidget(self.strumenti)
|
|
|
|
self.pages = self.disco, self.canzoni, self.strumenti
|
|
|
|
self.loadAction = self.menuBar().addAction('Load')
|
|
self.loadAction.triggered.connect(self.loadData)
|
|
self.saveAction = self.menuBar().addAction('Save')
|
|
self.saveAction.triggered.connect(self.saveData)
|
|
|
|
for i, actionName in enumerate(('Disco', 'Canzoni', 'Strumenti')):
|
|
action = self.menuBar().addAction(actionName)
|
|
action.setData(i)
|
|
|
|
self.menuBar().triggered.connect(self.switchPageAction)
|
|
|
|
self.setStyleSheet('''
|
|
Disco {
|
|
background: red;
|
|
}
|
|
Canzoni {
|
|
background: green;
|
|
}
|
|
Strumenti {
|
|
background: yellow;
|
|
}
|
|
''')
|
|
self.switchPage(0)
|
|
|
|
def loadData(self):
|
|
data = {
|
|
'artista': 'Elio e le Storie Tese',
|
|
'titolo': 'Elio Samaga Hukapan Kariyana Turu',
|
|
'canzoni': [
|
|
['John Holmes', 206],
|
|
['Nubi di ieri sul nostro domani odierno', 253],
|
|
],
|
|
'strumenti': [
|
|
['Elio', 'Voci'],
|
|
['Rocco', 'Tastiere'],
|
|
]
|
|
}
|
|
for page in self.pages:
|
|
page.setData(data)
|
|
|
|
def saveData(self):
|
|
data = {}
|
|
for page in self.pages:
|
|
data.update(page.getData())
|
|
print(data)
|
|
|
|
def switchPageAction(self, action):
|
|
index = action.data()
|
|
if index is not None:
|
|
self.switchPage(index)
|
|
|
|
def switchPage(self, index):
|
|
self.stackWidget.setCurrentIndex(index)
|
|
for action in self.menuBar().actions():
|
|
action.setEnabled(action.data() != index)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
# 初始化软件,这是必要操作
|
|
app = QtWidgets.QApplication(sys.argv)
|
|
|
|
# 创建窗体对象
|
|
win = MainWindow()
|
|
win.show()
|
|
|
|
# 结束所有逻辑,之前所有循环的逻辑结束
|
|
sys.exit(app.exec_()) |