PyQt QListWidgetsのサンプル

PyQt QListWidgetsのサンプル

まず初めに

この記事は前回の投稿の続きみたいなものです。

私がつまずいたところの解決方法のサンプルを載せます。

どなたかの参考になれば幸いです。

概要

  • lineEditに文字を入力
  • 登録ボタンでリストに入力文字列を追加
  • リスト内のアイテムを選択すると右下のラベルに現在選択しているアイテム名を表示

ソースコード

from PyQt5 import QtCore, QtGui, QtWidgets
import sys,os
class Ui_Form(object):
	def setupUi(self, Form):
		Form.setObjectName("Form")
		Form.resize(500, 650)
		self.listWidget = QtWidgets.QListWidget(Form)
		self.listWidget.setGeometry(QtCore.QRect(20, 40, 300, 580))
		self.listWidget.setObjectName("listWidget")
		self.pushButton = QtWidgets.QPushButton(Form)
		self.pushButton.setGeometry(QtCore.QRect(340, 160, 150, 50))
		font = QtGui.QFont()
		font.setPointSize(18)
		self.pushButton.setFont(font)
		self.pushButton.setObjectName("pushButton")
		self.lineEdit = QtWidgets.QLineEdit(Form)
		self.lineEdit.setGeometry(QtCore.QRect(340, 100, 150, 50))
		self.lineEdit.setFont(font)
		self.lineEdit.setObjectName("lineEdit")
		self.label = QtWidgets.QLabel(Form)
		self.label.setGeometry(QtCore.QRect(340, 410, 150, 50))
		self.label.setFont(font)
		self.label.setText("")
		self.label.setObjectName("label")

		self.retranslateUi(Form)
		
		self.listWidget.itemSelectionChanged.connect(Form.label_change)
		self.pushButton.clicked.connect(Form.button_click)
		QtCore.QMetaObject.connectSlotsByName(Form)

	def retranslateUi(self, Form):
		_translate = QtCore.QCoreApplication.translate
		Form.setWindowTitle(_translate("Form", "Form"))
		self.pushButton.setText(_translate("Form", "登録"))

class List_test(QtWidgets.QDialog):
	def __init__(self,parent=None):
		super(List_test, self).__init__(parent)
		self.ui = Ui_Form()
		self.ui.setupUi(self)
		s_list = ["東京","大阪","名古屋","福岡","宮城","北海道"]
		self.ui.listWidget.addItems(s_list)
	
	def button_click(self):
		text = self.ui.lineEdit.text()
		self.ui.listWidget.addItem(text)
	
	def label_change(self):
		Index = self.ui.listWidget.currentIndex()
		self.ui.label.setText(Index.data()) 


if __name__ == '__main__':
	app = QtWidgets.QApplication(sys.argv)

	window = List_test()
	window.show()
	sys.exit(app.exec_())

詳細

s_list = ["東京","大阪","名古屋","福岡","宮城","北海道"]
self.ui.listWidget.addItems(s_list)

リストの中身がなにもないのはわかりづらいと思い、初期化の時にアイテムを追加しています。

def button_click(self):
	text = self.ui.lineEdit.text()
	self.ui.listWidget.addItem(text)

.text()と書くだけで中身を取得できるのは簡単ですね。()を忘れないように気を付けて下さい。

初期化の時はaddItems()を使っていますが、今回は1つずつ追加するのでaddItem()を使っています。

def label_change(self):
	Index = self.ui.listWidget.currentIndex()
	self.ui.label.setText(Index.data()) 

currentIndex()を使うとリストの中で現在選択しているもののインデックスを取得します。そのインデックスのデータ(中身)をdata()で取得しています。

直接currentItemで中身をとれなかったのでこの方法を使っています。
いい感じのやり方があれば教えてほしいです...

最後に

今回はここまでです!

できるだけシンプルになるよう心掛けていますが、わかりにくければ修正しますのでコメントお願いします。

これからもGUI頑張りましょう!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です