こんにちは、アンプを制御するためにpythonとpyqt4でプログラムを書いています。プログラムはシリアルポート(pyserialモジュール)に接続します。現在、他のプラットフォームやコンピューターで使用できるようにバージョンを変更したいと考えています。すべてのシリアル ポートを含むリストを既にロードして ComboBox に追加しています。プログラムを起動するたびにポートを選択して接続するのは大変なので、ComboBox に最後に選択したポートを保存してそれに接続させたいと思います。私はPythonが初めてで、まったくわかりません.ComboBoxで選択された最後の文字列を保存してロードするにはどうすればよいですか?
質問する
1491 次
1 に答える
0
私が考えることができるのは、いくつかのファイル I/O を行うことだけです。
たとえば、ファイル index.txt があるとします。インデックスを保存する必要があるため、コンボ ボックスがアクティブになるたびに、ファイルを読み取りモードで開き、内部の数値を読み取り、ファイルを閉じ、整数を現在の項目のインデックスに変更し、ファイルを書き込みモードで開きます。 、新しい整数をそれに書き込み、ファイルを再度閉じます。このようにして、常に最後に選択したアイテムのインデックスをファイルに保存できます。
次に、起動時にファイルを再度開き、内部の文字列を読み取ります。.setCurrentIndex() を使用して、コンボボックスの現在のインデックスをこの文字列のインデックスに設定します。これにより、コンボ ボックスの currentIndexChanged() シグナルに自動的に接続されます。
ここにプログラムの例があります:
import sys
from PyQt4 import QtGui, QtCore
class Main(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.initUI()
def initUI(self):
centralwidget = QtGui.QWidget()
self.combo = QtGui.QComboBox(self)
self.combo.addItem("Serial 1")
self.combo.addItem("Serial 2")
self.combo.addItem("Serial 3")
self.combo.addItem("Serial 4")
self.combo.addItem("Serial 5")
self.combo.currentIndexChanged[str].connect(self.Show)
f = open("index.txt","rt")
index = f.read()
f.close()
self.combo.setCurrentIndex(int(index))
grid = QtGui.QGridLayout()
grid.addWidget(self.combo,0,0)
centralwidget.setLayout(grid)
self.setGeometry(300,300,280,170)
self.setCentralWidget(centralwidget)
def Show(self, item):
print("Connected to: ",item)
f = open("index.txt","rt")
index = f.read()
f.close()
index = self.combo.currentIndex()
f = open("index.txt","wt")
f.write(str(index))
f.close()
def main():
app = QtGui.QApplication(sys.argv)
main= Main()
main.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
注: これを機能させるには、プログラムと同じディレクトリに、番号を含む index.txt ファイルを作成する必要があります。
于 2013-08-15T02:32:01.210 に答える