2011-07-18 87 views
0

我想動態創建一個單選按鈕列表,代表我的電腦上的開放COM端口。第一次創建並顯示列表很容易,因爲我可以按照數字順序對端口進行排序,然後將相應的單選按鈕添加到我的垂直佈局中。PyQt排序列表的單選按鈕

但是,如果用戶插入創建新COM端口的新設備,我必須找到某種方法將新按鈕添加到正確的位置,因爲它可能沒有按正確的數字順序排列。到目前爲止,我已經能夠做到這一點的唯一方法就是擺脫所有按鈕,然後在排序列表後重新添加它們,因爲addWidget不允許我指定添加窗口小部件的位置。這種方法似乎效率很低,我假設有一個更簡單的方法,但我還沒有找到它。

回答

3

而不是使用addWidget()的,確定指標的按鈕放置新的列表,並使用QBoxLayout.insertWidget(index, widget)在那裏將其插入:

newButton = QRadioButton(...) 
newText = newButton.text() 

index = 0 
for button in get_buttons(): 
    if button.text() >= newText: 
     break 
    index += 1 

layout.insertWidget(index, newButton) 
+0

謝謝,我會嘗試了這一點。你知道如果我試圖插入一個索引高於佈局創建的「盒子」數量的按鈕會發生什麼?例如,如果端口1,2,3和10打開,我可以像'layout.insertWidget(10,com10button)'那樣在沒有在按鈕3和10之間創建空框的情況下執行操作? – gwenger

+1

剛剛一切工作如何我想要它。我使用平分模塊來確定索引,而不必編寫自己的循環來確定索引,因爲順序是基於整數。 – gwenger

+0

@gwenger:好點。如果您的列表總是使用整數參考值進行排序,那麼'bisect'模塊就是要走的路。 –