我想使用currentTextChanged信號僅在我更改 ListWidget 中的某些內容時觸發,例如選擇一個專案。但是每次我運行腳本時,我都會得到第一行“一個”,即使我什么都不做(沒有點擊等)。我預計第一次不會觸發。這種行為有什么原因嗎?我正在使用 Pycharm,但我想應該沒關系。
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QListWidget
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QListWidget()
widget.addItems(["One", "Two", "Three"])
widget.currentTextChanged.connect(self.text_changed) #triggering here
self.setCentralWidget(widget)
def text_changed(self, s): # s is a str
print(s)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_() # -> i expect to show nothing for the first time,instead is always "one"
uj5u.com熱心網友回復:
首先,請記住,專案視圖上的選擇可能并不總是與其當前索引匹配。您可以有一個有效的當前索引但沒有選擇,也可以有一個不包括當前索引的有效選擇(這也可能是無效的)。單擊視圖中的專案通常會更改選擇和當前索引,但這可能并不總是正確的。
現在,當一個視窗第一次顯示時,它會自動嘗試將輸入焦點設定在第一個可以接受它的小部件上。
當專案視圖第一次獲得焦點時,它會自動將當前索引設定為第一個可用(和可選)索引(如果存在)。
currentTextChanged()是“在當前專案更改時發出”,因此,由于您只有一個小部件(串列)并且它也接受焦點,所以 Qt 將在第一次顯示視窗時將其聚焦,從而導致當前索引更改,因此,發出信號。
如果您想在用戶主動更改當前索引(“選擇”)時獲得通知,請使用itemSelectionChanged()或視圖提供的相關selectionChanged信號selectionModel()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/488857.html
上一篇:函式將陣列中的第一項和最后一項相加,直到陣列中只剩下兩項
下一篇:將字典值添加到資料框列名
