2017-06-01 96 views
0

我是Python和pyQt的新手。我有一個QDialog的類,並在init中傳遞一個字符串列表給這個類;pyQt,列表傳遞給類初始化

class Remove_Source(QtWidgets.QDialog, Ui_R_Source): 
    def __init__(self, items=None): 
     super(Remove_Source , self).__init__() 
     self.ui = Ui_R_Source() 
     self.ui.setupUi(self) 
     self.setWindowTitle("Remove Source Folders") 
     self.items = items or [] 
     for i in range(self.items.count()): 
      self.ui.keep_window.addItem(self.items(i)) 
     self.exec() 

該列表在班級中無法訪問。任何人都知道我在做什麼錯了?謝謝

回答

1

你的語法有幾個問題。您需要檢查的一些要點:

1)count對於Python列表具有不同於QList的含義。 python列表的等價物是len(self.items)(例如)。

2)indexation運算符(如在C++中)是[]()將是一個call操作(如在函數及其參數中)。在您的代碼中,這意味着將self.items(i)更改爲self.items[i]

class Remove_Source(QtWidgets.QDialog, Ui_R_Source): 
    def __init__(self, items=[]):      # changed here 
     super(Remove_Source , self).__init__() 
     self.ui = Ui_R_Source() 
     self.ui.setupUi(self) 
     self.setWindowTitle("Remove Source Folders") 
     self.items = items 
     for i in range(len(self.items)):    # changed here 
      self.ui.keep_window.addItem(self.items[i]) # changed here 
     self.exec() 

最後一點,雖然不是無效的,使用logical operators提供一個值可能讓你陷入困境,最終。在你的情況下,在這裏items or []你假設items有一個真值。這是好的,如果你知道發生了什麼事情,但它可能是危險的,否則。在代碼中,我將默認值作爲空列表[],並執行了正常歸屬操作self.items = items。我認爲它更加明確和安全(一般來說)。

無論如何嘗試這些修改,看看它是否能解決問題。

+0

是的 - 非常感謝您的幫助! –