class TableEditor(QWidget): def __init__(self, tableName, parent=None): super().__init__(parent) self.model = QSqlTableModel(self) self.model.setTable(tableName) self.model.setEditStrategy(QSqlTableModel.OnManualSubmit) self.model.select() self.model.setHeaderData(0, Qt.Horizontal, self.tr("ID")) self.model.setHeaderData(1, Qt.Horizontal, self.tr("First name")) self.model.setHeaderData(2, Qt.Horizontal, self.tr("Last name")) view = QTableView() view.setModel(self.model) view.resizeColumnsToContents() self.submitButton = QPushButton(self.tr("Submit")) self.submitButton.setDefault(True) self.revertButton = QPushButton(self.tr("&Revert")) self.quitButton = QPushButton(self.tr("Quit")) self.buttonBox = QDialogButtonBox(Qt.Vertical) self.buttonBox.addButton(self.submitButton, QDialogButtonBox.ActionRole) self.buttonBox.addButton(self.revertButton, QDialogButtonBox.ActionRole) self.buttonBox.addButton(self.quitButton, QDialogButtonBox.RejectRole) self.submitButton.clicked.connect(self.submit) self.revertButton.clicked.connect(self.model.revertAll) self.quitButton.clicked.connect(self.close) mainLayout = QHBoxLayout() mainLayout.addWidget(view) mainLayout.addWidget(self.buttonBox) self.setLayout(mainLayout) self.setWindowTitle(self.tr("Cached Table")) def submit(self): self.model.database().transaction() if self.model.submitAll(): self.model.database().commit() else: self.model.database().rollback() QMessageBox.warning( self, self.tr("Cached Table"), self.tr( "The database reported an error: {}".format( self.model.lastError().text() ) ), )
def _setup_login_dialog(dialog, account_input, password_input): dialog.setWindowTitle('登录CGTeamWork') account_input.setPlaceholderText('CGTeamwork账号名') password_input.setPlaceholderText('密码') password_input.setEchoMode(QLineEdit.Password) ok_button = QPushButton('登录') ok_button.setDefault(True) ok_button.clicked.connect(dialog.accept) layout = QVBoxLayout(dialog) layout.addWidget(QLabel('帐号')) layout.addWidget(account_input) layout.addWidget(QLabel('密码')) layout.addWidget(password_input) layout.addWidget(ok_button) dialog.setLayout(layout)
def _setup_login_dialog(dialog, account_input, password_input): # type: (Any, Any, Any) -> None dialog.setWindowTitle("登录CGTeamWork") account_input.setPlaceholderText("CGTeamwork账号名") password_input.setPlaceholderText("密码") password_input.setEchoMode(QLineEdit.Password) ok_button = QPushButton("登录") ok_button.setDefault(True) ok_button.clicked.connect(dialog.accept) layout = QVBoxLayout(dialog) layout.addWidget(QLabel("帐号")) layout.addWidget(account_input) layout.addWidget(QLabel("密码")) layout.addWidget(password_input) layout.addWidget(ok_button) dialog.setLayout(layout)
class Client(QDialog): def __init__(self, parent: QWidget = None): super().__init__(parent) self._in = QDataStream() self.blockSize = 0 self.currentFortune = "" self.hostLineEdit = QLineEdit("fortune") self.getFortuneButton = QPushButton(self.tr("Get Fortune")) self.statusLabel = QLabel( self.tr( "This examples requires that you run the Local Fortune Server example as well." ) ) self.socket = QLocalSocket() self.setWindowFlags(self.windowFlags() & ~Qt.WindowContextHelpButtonHint) hostLabel = QLabel(self.tr("&Server name:")) hostLabel.setBuddy(self.hostLineEdit) self.statusLabel.setWordWrap(True) self.getFortuneButton.setDefault(True) quitButton = QPushButton(self.tr("Quit")) buttonBox = QDialogButtonBox() buttonBox.addButton(self.getFortuneButton, QDialogButtonBox.ActionRole) buttonBox.addButton(quitButton, QDialogButtonBox.RejectRole) self._in.setDevice(self.socket) self._in.setVersion(QDataStream.Qt_5_10) self.hostLineEdit.textChanged.connect(self.enableGetFortuneButton) self.getFortuneButton.clicked.connect(self.requestNewFortune) quitButton.clicked.connect(self.close) self.socket.readyRead.connect(self.readFortune) self.socket.errorOccurred.connect(self.displayError) mainLayout = QGridLayout(self) mainLayout.addWidget(hostLabel, 0, 0) mainLayout.addWidget(self.hostLineEdit, 0, 1) mainLayout.addWidget(self.statusLabel, 2, 0, 1, 2) mainLayout.addWidget(buttonBox, 3, 0, 1, 2) self.setWindowTitle(QGuiApplication.applicationDisplayName()) self.hostLineEdit.setFocus() @Slot() def requestNewFortune(self): self.getFortuneButton.setEnabled(False) self.blockSize = 0 self.socket.abort() self.socket.connectToServer(self.hostLineEdit.text()) @Slot() def readFortune(self): if self.blockSize == 0: # Relies on the fact that QDataStream serializes a quint32 into # sizeof(quint32) bytes if self.socket.bytesAvailable() < 4: # (int)sizeof(quint32)) return self.blockSize = self._in.readUInt32() if self.socket.bytesAvailable() < self.blockSize or self._in.atEnd(): return nextFortune = "" nextFortune = self._in.readQString() if nextFortune == self.currentFortune: QTimer.singleShot(0, self.requestNewFortune) return currentFortune = nextFortune self.statusLabel.setText(currentFortune) self.getFortuneButton.setEnabled(True) @Slot(QLocalSocket.LocalSocketError) def displayError(self, socketError): if socketError == QLocalSocket.ServerNotFoundError: QMessageBox.information( self, self.tr("Local Fortune Client"), self.tr( "The host was not found. Please make sure " "that the server is running and that the " "server name is correct." ), ) elif socketError == QLocalSocket.ConnectionRefusedError: QMessageBox.information( self, self.tr("Local Fortune Client"), self.tr( "The connection was refused by the peer. " "Make sure the fortune server is running, " "and check that the server name is correct." ), ) elif socketError == QLocalSocket.PeerClosedError: return else: QMessageBox.information( self, self.tr("Local Fortune Client"), self.tr( "The following error occurred: %s." % (self.socket.errorString()) ), ) self.getFortuneButton.setEnabled(True) @Slot() def enableGetFortuneButton(self): self.getFortuneButton.setEnabled(bool(self.hostLineEdit.ext()))
class InformationWindow(QDialog): imageChanged = Signal(int, str) def __init__(self, id_, items, parent=None): super().__init__(parent) itemLabel = QLabel(self.tr("Item: ")) descriptionLabel = QLabel(self.tr("Description: ")) imageFileLabel = QLabel(self.tr("Image file: ")) self.createButtons() self.itemText = QLabel() self.descriptionEditor = QTextEdit() self.imageFileEditor = QComboBox() self.imageFileEditor.setModel(items.relationModel(1)) self.imageFileEditor.setModelColumn( items.relationModel(1).fieldIndex("file")) self.mapper = QDataWidgetMapper(self) self.mapper.setModel(items) self.mapper.setSubmitPolicy(QDataWidgetMapper.ManualSubmit) self.mapper.setItemDelegate(QSqlRelationalDelegate(self.mapper)) self.mapper.addMapping(self.imageFileEditor, 1) self.mapper.addMapping(self.itemText, 2, b"text") self.mapper.addMapping(self.descriptionEditor, 3) self.mapper.setCurrentIndex(id_) self.descriptionEditor.textChanged.connect(self.enableButtons) self.imageFileEditor.currentIndexChanged.connect(self.enableButtons) formLayout = QFormLayout() formLayout.addRow(itemLabel, self.itemText) formLayout.addRow(imageFileLabel, self.imageFileEditor) formLayout.addRow(descriptionLabel, self.descriptionEditor) layout = QVBoxLayout() layout.addLayout(formLayout) layout.addWidget(self.buttonBox) self.setLayout(layout) self.itemId = id_ self.displayedImage = self.imageFileEditor.currentText() self.setWindowFlags(Qt.Window) self.enableButtons(False) self.setWindowTitle(self.itemText.text()) def id(self): return self.itemId @Slot() def revert(self): self.mapper.revert() self.enableButtons(False) @Slot() def submit(self): newImage = self.imageFileEditor.currentText() if self.displayedImage != newImage: self.displayedImage = newImage self.imageChanged.emit(self.itemId, newImage) self.mapper.submit() self.mapper.setCurrentIndex(self.itemId) self.enableButtons(False) def createButtons(self): self.closeButton = QPushButton(self.tr("&Close")) self.revertButton = QPushButton(self.tr("&Revert")) self.submitButton = QPushButton(self.tr("&Submit")) self.closeButton.setDefault(True) self.closeButton.clicked.connect(self.close) self.revertButton.clicked.connect(self.revert) self.submitButton.clicked.connect(self.submit) self.buttonBox = QDialogButtonBox(self) self.buttonBox.addButton(self.submitButton, QDialogButtonBox.AcceptRole) self.buttonBox.addButton(self.revertButton, QDialogButtonBox.ResetRole) self.buttonBox.addButton(self.closeButton, QDialogButtonBox.RejectRole) @Slot() @Slot(bool) def enableButtons(self, enable=True): self.revertButton.setEnabled(enable) self.submitButton.setEnabled(enable)