Можно ли использовать QInputDialog с вложенным списком или что-то в этом роде? - PullRequest
0 голосов
/ 19 сентября 2019

Все примеры или документация по PyQt5 QInputDialog, которые я обнаружил, использовали простые классические списки, ограниченные только одним элементом на «строку» (как в моем примере кода («Красный», «Синий» или «Зеленый»)).

Я ищу хороший способ создания более подробного многомерного списка, например таблицы, в которой пользователь видит и выбирает всю строку (с несколькими значениями в качестве одного элемента) в диалоге ввода вместо одного значения.

Например, такой вложенный список: [['' Ryan ', 24,' m '], [' Lisa ', 22,' f '], [' Joe ', 30,' m ']]

-> Представьте, что каждый из трех списков в списке должен быть одной строкой (записью) в QInputDialog, которую можно выбрать.Как в таблице с флажком для каждой строки.

Возможно ли что-то подобное?Кто-нибудь знает?

#The normal (limited) version with a simple list I am referring to looks like that:
def getChoice(self):
    itemlist = ("Red","Blue","Green")
    item, okPressed = QInputDialog.getItem(self, "Get item","Color:", itemlist, 0, False)
    if okPressed and item:
        print(item)

1 Ответ

1 голос
/ 19 сентября 2019

Метод join() берет все элементы итерируемого и объединяет их в одну строку.

Синтаксис: string.join(iterable)

import sys
from PyQt5.QtCore import QTimer
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QLineEdit, QInputDialog, QLabel, QVBoxLayout


class PopupDialog(QtWidgets.QDialog):
    def __init__(self):
        super(PopupDialog, self).__init__()
        self.selected_item = None
        layout = QtWidgets.QFormLayout()
        self.setLayout(layout)
        self.setWindowTitle("New Popup")
        self.setMinimumWidth(400)

#        items = (['Ryan', 24, 'm'], ['Lisa', 22, 'f'], ['Joe', 30, 'm'])
        items = (['Ryan', '24', 'm'], ['Lisa', '22', 'f'], ['Joe', '30', 'm'])
        items = [ " ".join(item) for item in items ]                              # <<<-----<
        item, okPressed = QInputDialog.getItem(self, "Get item",
                          "Color:", items, 0, False)
        if okPressed and item:
            self.selected_item = item


class MainWindow(QtWidgets.QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setMinimumWidth(600)
        self.setWindowTitle("Main Window")
        self.le = QtWidgets.QLineEdit()
        button = QtWidgets.QPushButton("Select...")
        button.clicked.connect(self.get_input)
        layout = QtWidgets.QHBoxLayout()
        layout.addWidget(self.le)
        layout.addWidget(button)
        self.setLayout(layout)

    def get_input(self):
        popup = PopupDialog()
        print("got selection data: ", popup.selected_item)
        self.le.setText(popup.selected_item)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

enter image description here

...