テキストを取得しようとしているときにQListViewがNoneTypeを表示するのはなぜですか?

user321985

私はPyQt5で簡単なファイルサーチャーを書いています(完全なコードはここにあります)。

# -*- coding: utf-8 -*-

import sys, os, platform, fnmatch
from PyQt5 import QtCore, QtGui, QtWidgets

sep = os.sep
Ot = platform.system()
file_name = os.path.basename(__file__)
file_path = __file__.replace(file_name, '')

def find(ext, path):
    result = []
    for root, dirs, files in os.walk(path):
        for name in files:
            if fnmatch.fnmatch(name, ext):
                result.append(os.path.join(root, name))
    _ = dirs # For PyLint
    return result

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(804, 554)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("C:/Users/Luger/Pictures/ico/search.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        MainWindow.setWindowIcon(icon)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.folderButton = QtWidgets.QPushButton(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(9)
        self.folderButton.setFont(font)
        self.folderButton.setObjectName("folderButton")
        self.horizontalLayout.addWidget(self.folderButton)
        self.extensionLineEdit = QtWidgets.QLineEdit(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(9)
        self.extensionLineEdit.setFont(font)
        self.extensionLineEdit.setMaxLength(25)
        self.extensionLineEdit.setAlignment(QtCore.Qt.AlignCenter)
        self.extensionLineEdit.setObjectName("extensionLineEdit")
        self.horizontalLayout.addWidget(self.extensionLineEdit)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.searchButton = QtWidgets.QPushButton(self.centralwidget)
        self.searchButton.setObjectName("searchButton")
        self.verticalLayout.addWidget(self.searchButton)
        self.verticalLayout_2.addLayout(self.verticalLayout)
        self.listView = QtWidgets.QListView(self.centralwidget)
        self.listView.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
        self.listView.setIconSize(QtCore.QSize(16, 16))
        self.listView.setObjectName("listView")
        self.entry = QtGui.QStandardItemModel()
        self.listView.setModel(self.entry)
        self.verticalLayout_2.addWidget(self.listView)
        self.horizontalLayout_2.addLayout(self.verticalLayout_2)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 804, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        self.folderButton.clicked.connect(self.fileChooserFunct)
        self.searchButton.clicked.connect(self.searchButtonFunct)
        self.listView.clicked[QtCore.QModelIndex].connect(self.on_clicked)

    def fileChooserFunct(self):
        _translate = QtCore.QCoreApplication.translate
        self.dir_to_scan = QtWidgets.QFileDialog.getExistingDirectory(None, 'Select A folder:', f'{file_path[0]}:{sep}', QtWidgets.QFileDialog.ShowDirsOnly)
        self.folderButton.setText(_translate("MainWindow", f" Selected: {self.dir_to_scan} "))
        self.folderButton.adjustSize()
        if Ot == 'Windows': self.dir_to_scan = self.dir_to_scan.replace('/', '\\')

    def searchButtonFunct(self):
        _translate = QtCore.QCoreApplication.translate
        self.searchButton.setText(_translate("MainWindow", "Searching, please wait..."))
        MainWindow.setWindowTitle(_translate("MainWindow", "File Searcher - Searching"))
        self.searchButton.adjustSize()
        self.userExtension = self.extensionLineEdit.text()
        result = find(f'*.{self.userExtension}', self.dir_to_scan)

        model = QtGui.QStandardItemModel()
        self.listView.setModel(model)

        for i in result:
            item = QtGui.QStandardItem(i)
            model.appendRow(item)

        self.searchButton.setText(_translate("MainWindow", "Search"))
        MainWindow.setWindowTitle(_translate("MainWindow", "File Searcher"))
        self.searchButton.adjustSize()

    def on_clicked(self, index):
        item = self.entry.itemFromIndex(index)
        print(f"itemText='{item.text()}'")


    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "File Searcher"))
        self.folderButton.setText(_translate("MainWindow", " Select a folder "))
        self.extensionLineEdit.setPlaceholderText(_translate("MainWindow", "Extension of the file"))
        self.searchButton.setText(_translate("MainWindow", "Search"))


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    app.setStyle('Fusion')
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

ユーザーの回答に基づいて、このMREを追加しました(正しいことを願っています)

        self.listView = QtWidgets.QListView(self.centralwidget) #create the widget
        self.listView.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) #paths cannot be modified by the user
        self.listView.setObjectName("listView") # Set his name
        self.entry = QtGui.QStandardItemModel() #Those two I don't really know what are for
        self.listView.setModel(self.entry)

        self.listView.clicked[QtCore.QModelIndex].connect(self.on_clicked) #User clicked something in QListView, calling on_clicked


    def on_clicked(self, index):
        item = self.entry.itemFromIndex(index)
        print(f"itemText='{item.text()}'") #Error is given here

QtDesignerを使用し、pyuic5.exeを使用してUIファイルを変換し、少し変更しましたが、QListViewでユーザーが選択したオブジェクトを取得するのに行き詰まりました。

私はのコードのビットを使用S.Nickをして、この答え彼のコードを使用し、同じ変数の名前を使用していても、オブジェクトをクリックすると取得しますAttributeError: 'NoneType' object has no attribute 'text'(彼のコードは問題なく機能しました)。

エラーはここに表示されます

    def on_clicked(self, index):
        item = self.entry.itemFromIndex(index)
        print(f"itemText='{item.text()}'")

私は2日前に解決策の検索を開始し、ほとんどのstackoverflowの回答、サイト、例、ビデオ(ロシア語で話す2人の男のうち1時間でも)を見ましたが、それでもここでブロックされています。
誰かがこれを修正する方法を知っていますか?ありがとう

eyllanesc

問題は、searchButtonFunctメソッドで、QListViewに新しいモデルを作成して、QModelIndexがその新しいモデルに属するようにすることです。したがってself.entry.itemFromIndex()、そのモデルに属さないQModelIndexを使用するNoneが返されます。

解決策は、同じモデルを使用することです。

def searchButtonFunct(self):
    self.entry.clear()
    _translate = QtCore.QCoreApplication.translate
    self.searchButton.setText(_translate("MainWindow", "Searching, please wait..."))
    MainWindow.setWindowTitle(_translate("MainWindow", "File Searcher - Searching"))
    self.searchButton.adjustSize()
    self.userExtension = self.extensionLineEdit.text()
    result = find(f"*.{self.userExtension}", self.dir_to_scan)

    for i in result:
        item = QtGui.QStandardItem(i)
        self.entry.appendRow(item)

    self.searchButton.setText(_translate("MainWindow", "Search"))
    MainWindow.setWindowTitle(_translate("MainWindow", "File Searcher"))
    self.searchButton.adjustSize()

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

テキストを取得しようとしているときにQListViewがNoneTypeを表示するのはなぜですか?

分類Dev

QSortFilterProxyModelを使用しているときに、layoutChanged.emit()がQListViewを更新しないのはなぜですか?

分類Dev

テキストなしでフレックス表示を使用しているときに行の高さが無視されるのはなぜですか?

分類Dev

JUnitテストを実行しようとすると、「ClassLoaderで永続性アーカイブを検索しているときに例外がスローされました」というエラーが表示されるのはなぜですか?

分類Dev

[...]という形式のリテラルが、コンテキストに依存しているように見える意味を持つのはなぜですか?

分類Dev

凡例付きの強調表示されたテキストをHTML出力として取得するにはどうすればよいですか?

分類Dev

ノードが表示されていないときに自分のテキストを表示するにはどうすればよいですか

分類Dev

「$ comment-> users-> username」にアクセスしようとすると、「非オブジェクトのプロパティ「username」を取得しようとしています」と表示されるのはなぜですか?

分類Dev

JSpinnerオブジェクトのコンテンツ全体を強調表示して、フォーカスが取得されたときにユーザー入力を削除する必要がないようにするにはどうすればよいですか?

分類Dev

選択したテキストのHTMLを取得しようとしたときに、ブラウザがタグを自動的に開いたり閉じたりしないようにするにはどうすればよいですか?

分類Dev

ワンドを使用してPDFから画像jpgを抽出すると、テキストの上に黒い背景が表示されるのはなぜですか

分類Dev

「InvalidCastException:指定されたキャストが無効です」というメッセージが表示されるのはなぜですか。タイプをインターフェイスにキャストしようとしたとき

分類Dev

setInterval()メソッドを使用しているときにangularJSがテキスト入力をリッスンできないのはなぜですか?

分類Dev

Thread.interrupt()がロックを取得しようとしているスレッドに割り込みできないのはなぜですか

分類Dev

bashスクリプトで<< EOFを使用しているときに、テキスト出力を非表示にするにはどうすればよいですか?

分類Dev

EditTextテキストの書式をキャプチャして、次にTextViewに表示するときに太字の単語が太字で表示されるようにするにはどうすればよいですか。

分類Dev

大量のテキストを表示しているときにPuTTYが入力に応答しなくなるのを防ぐにはどうすればよいですか?

分類Dev

ArchLinuxでSnapStoreフォントを空の長方形ではなくテキストとして表示するにはどうすればよいですか?

分類Dev

クラスを追加してjQueryでCSSトライアングルを非表示にしようとすると、機能しないのはなぜですか?

分類Dev

フラグメントをxmlに統合すると、フラグメントをキャストして表示できないというエラーメッセージが表示されるのはなぜですか?

分類Dev

主キーをテキストとして挿入するときに、AnormがTypeDoesNotMatch例外をスローするのはなぜですか?

分類Dev

iOSのCordovaを長押しすると、テキスト選択が無効になっている場合でもテキスト選択の虫眼鏡が表示されます。削除するにはどうすればよいですか?

分類Dev

Equip_NoがEquip_noテキストボックスの値と等しくない場合にMsgBoxを表示するにはどうすればよいですか?

分類Dev

ハードディスクからすべての画像をリストに取得しようとすると例外が発生するのはなぜですか?

分類Dev

DBからの番号ではなく、テキストとしてURLを表示するにはどうすればよいですか?

分類Dev

multicolを使用してボタンとテキストの行が折り返されないようにするにはどうすればよいですか?

分類Dev

HTMLテキストを入れることができる画像の下の完全な境界線を取得するにはどうすればよいですか

分類Dev

.proとmain.cppでプラグインを呼び出しているときに、[テキストの編集]をクリックした後にqml仮想キーボードが表示されないのはなぜですか

分類Dev

テキストを編集するときにロゴが移動しないようにするにはどうすればよいですか?

Related 関連記事

  1. 1

    テキストを取得しようとしているときにQListViewがNoneTypeを表示するのはなぜですか?

  2. 2

    QSortFilterProxyModelを使用しているときに、layoutChanged.emit()がQListViewを更新しないのはなぜですか?

  3. 3

    テキストなしでフレックス表示を使用しているときに行の高さが無視されるのはなぜですか?

  4. 4

    JUnitテストを実行しようとすると、「ClassLoaderで永続性アーカイブを検索しているときに例外がスローされました」というエラーが表示されるのはなぜですか?

  5. 5

    [...]という形式のリテラルが、コンテキストに依存しているように見える意味を持つのはなぜですか?

  6. 6

    凡例付きの強調表示されたテキストをHTML出力として取得するにはどうすればよいですか?

  7. 7

    ノードが表示されていないときに自分のテキストを表示するにはどうすればよいですか

  8. 8

    「$ comment-> users-> username」にアクセスしようとすると、「非オブジェクトのプロパティ「username」を取得しようとしています」と表示されるのはなぜですか?

  9. 9

    JSpinnerオブジェクトのコンテンツ全体を強調表示して、フォーカスが取得されたときにユーザー入力を削除する必要がないようにするにはどうすればよいですか?

  10. 10

    選択したテキストのHTMLを取得しようとしたときに、ブラウザがタグを自動的に開いたり閉じたりしないようにするにはどうすればよいですか?

  11. 11

    ワンドを使用してPDFから画像jpgを抽出すると、テキストの上に黒い背景が表示されるのはなぜですか

  12. 12

    「InvalidCastException:指定されたキャストが無効です」というメッセージが表示されるのはなぜですか。タイプをインターフェイスにキャストしようとしたとき

  13. 13

    setInterval()メソッドを使用しているときにangularJSがテキスト入力をリッスンできないのはなぜですか?

  14. 14

    Thread.interrupt()がロックを取得しようとしているスレッドに割り込みできないのはなぜですか

  15. 15

    bashスクリプトで<< EOFを使用しているときに、テキスト出力を非表示にするにはどうすればよいですか?

  16. 16

    EditTextテキストの書式をキャプチャして、次にTextViewに表示するときに太字の単語が太字で表示されるようにするにはどうすればよいですか。

  17. 17

    大量のテキストを表示しているときにPuTTYが入力に応答しなくなるのを防ぐにはどうすればよいですか?

  18. 18

    ArchLinuxでSnapStoreフォントを空の長方形ではなくテキストとして表示するにはどうすればよいですか?

  19. 19

    クラスを追加してjQueryでCSSトライアングルを非表示にしようとすると、機能しないのはなぜですか?

  20. 20

    フラグメントをxmlに統合すると、フラグメントをキャストして表示できないというエラーメッセージが表示されるのはなぜですか?

  21. 21

    主キーをテキストとして挿入するときに、AnormがTypeDoesNotMatch例外をスローするのはなぜですか?

  22. 22

    iOSのCordovaを長押しすると、テキスト選択が無効になっている場合でもテキスト選択の虫眼鏡が表示されます。削除するにはどうすればよいですか?

  23. 23

    Equip_NoがEquip_noテキストボックスの値と等しくない場合にMsgBoxを表示するにはどうすればよいですか?

  24. 24

    ハードディスクからすべての画像をリストに取得しようとすると例外が発生するのはなぜですか?

  25. 25

    DBからの番号ではなく、テキストとしてURLを表示するにはどうすればよいですか?

  26. 26

    multicolを使用してボタンとテキストの行が折り返されないようにするにはどうすればよいですか?

  27. 27

    HTMLテキストを入れることができる画像の下の完全な境界線を取得するにはどうすればよいですか

  28. 28

    .proとmain.cppでプラグインを呼び出しているときに、[テキストの編集]をクリックした後にqml仮想キーボードが表示されないのはなぜですか

  29. 29

    テキストを編集するときにロゴが移動しないようにするにはどうすればよいですか?

ホットタグ

アーカイブ