2016-09-29 41 views
1

私が書いたコードの一部についていくつかの意見が必要でした。私のUIは2つの列を持つQTableWidgetで構成され、2つの列の1つにQComboBoxが設定されます。列の1つに値がない場合はQTableWidgetの行を非表示にします

最初の列では、シーンで見つかった文字リグ(フルパス)のリストをセルに入力し、2番目の列はセルごとにコンボボックスを作成し、カラーオプションとして入力しますオプションはjsonファイルから来ます。

現在、私はすべての結果を表示するオプションをユーザに与えるラジオボタンを作成しようとしています。または、その特定の行のコンボボックス内にカラーオプションがない場合、それらの行を非表示にします。

私のコードで見ることができるように、カラムごとにデータを取り込んでいますので、0以外のオプションでコンボボックスを入れないうちにif not len(new_sub_name) == 0:を入れようとしましたが、どのように隠すかコンボボックスにオプションがない行?

def populate_table_data(self): 
    self.sub_names, self.fullpaths = get_chars_info() 

    # Output Results 
    # self.sub_names : ['/character/nicholas/generic', '/character/mary/default'] 
    # self.fullpaths : ['|Group|character|nicholas_generic_001', '|Group|character|mary_default_001'] 

    # Insert fullpath into column 1 
    for fullpath_index, fullpath_item in enumerate(self.fullpaths): 
     new_path = QtGui.QTableWidgetItem(fullpath_item) 
     self.character_table.setItem(fullpath_index, 0, new_path) 
     self.character_table.resizeColumnsToContents() 

    # Insert colors using itempath into column 2 
    for sub_index, sub_name in enumerate(self.sub_names): 
     new_sub_name = read_json(sub_name) 

     if not len(new_sub_name) == 0: 
      self.costume_color = QtGui.QComboBox() 
      self.costume_color.addItems(list(sorted(new_sub_name))) 
      self.character_table.setCellWidget(sub_index, 1, self.costume_color) 

答えて

2

setRowHiddenを使用して行を非表示にすることができます。コードの残りの部分については、私はあなたが現在持っているものに大きな間違いはないと思うが、FWIWはこれを次のように書くだろう(もちろん、完全にテストされていない)。

def populate_table_data(self): 
    self.sub_names, self.fullpaths = get_chars_info() 
    items = zip(self.sub_names, self.fullpaths) 
    for index, (sub_name, fullpath) in enumerate(items): 
     new_path = QtGui.QTableWidgetItem(fullpath) 
     self.character_table.setItem(index, 0, new_path) 
     new_sub_name = read_json(sub_name) 
     if len(new_sub_name): 
      combo = QtGui.QComboBox() 
      combo.addItems(sorted(new_sub_name)) 
      self.character_table.setCellWidget(index, 1, combo) 
     else: 
      self.character_table.setRowHidden(index, True) 

    self.character_table.resizeColumnsToContents() 
+0

ありがとう、私のデータをどのように投入しているのですか? – dissidia

+0

@ディシディア。それがあなたにとってどれほど有用かはっきりしていませんが、私は少し答えを広げました。 – ekhumoro

+0

私はそれをチェックアウトして、私のコードを帰宅するのを忘れてしまいます。しかし、それでも、 '(sub_name、fullpath)'が一緒に括弧書きされているのはなぜですか?私はこれが単純に最適化し、私のコードを短くしていると思いますか? @ディシディア。 – dissidia

関連する問題