2011-09-14 21 views
-1

私は、tkinter python 2.7を使用してコードに埋め込まれたデータベース配列を持つGUI検索可能な細菌データベースを作成しようとしています。ラジオボタンを使用して特定の基準を選択すると、アレイを選択的に検索し、「識別」ボタンを押すと、それらの選択に一致するすべての細菌のIDがラベルとして表示されます。ラジオボタンの選択肢を配列データと結び付ける方法

以下の非機能スニペット[idbuttonclick(self)]を投稿しました。

何スニペットがDEF(自己)idbuttonclickが行うことになっている。

1)列1~4は、ラジオボタンの文字列変数オプション各行細菌IDを表すためのマトリックス/アレイ名前「データ」を検索多くの場合

2)可変オプションラジオボタンの選択

3に一致する「データ」の行を選択する)がself.id_frameにラベルとして選択された行からデータ列0における細菌IDを印刷しidsは1〜20です。それ以外の場合は、メッセージラベル「エラー:データが不十分です」を印刷します。

def idbuttonclick(self): 

    def column(matrix, i): 

     if column(data, 1)!=self.gram_option.get(): line.destroy() 
     if column(data, 2)!=self.meta_option.get(): line.destroy() 
     if column(data, 3)!=self.cat_option.get(): line.destroy() 
     if column(data, 4)!=self.oxi_option.get(): line.destroy() 

     column(data, 0)==id 

    if id.count >= 20 or id.count == 0: 
     Label(self.id_frame, text = "Error: Not enough data", background = "white").pack(side=TOP, anchor = N) 
    else: Label(self.id_frame, text = id, background = "white").pack(side=TOP, anchor = N) 

私は私のラジオボタンの選択に基づいてid.frameラベルを与えるために、コードを得ているが、それでも、その後のRadioButtonに基づいてid.frameラベルを提供するために、配列内の座標にラジオボタンの選択をリンクすることはできません/配列座標が一致します。

マトリックスやリストとタプルのリストは、明らかに座標インデックス(i、j)を使用して要素を格納できないため、行列ではなく配列です。

ここに、配列とidbuttonのクリックコマンドを含む私の新しいドラフトがあります。

これはどのように動作するのですか: ラジオボタンself.gram_option =( '+')がある場合は、同じ行内の配列列2の配列列1のバイナ名がid.frameラベルに表示されます。 )が選択される。 したがって、ラベルには「Acetobacter aceti、Pseudomonas sp。」と表示されます。
さらに、self.meta_option.get()をクリックすると、カラム2に対応し、選択範囲が狭くなります。 'fac anaerobe'の値は 'Acetobacter aceti'と表示され、 'aerobe'の値は 'Pseudomonas sp。

data = array([ 
     ['Acetobacter aceti','+', 'fac anaerobe', '+', '--'], 
     ['Citrobacter freundii','--', 'fac anaerobe', '+', '--'], 
     ['Pseudomonas sp','+', 'aerobe', '--', '--']]) 

    data.readlines() 



def idbuttonclick(self, event): 

    self.id_frame.destroy() 
    self.id_frame = Frame(self.main_right_frame, borderwidth=5, height=50, background="white") 
    self.id_frame.pack(side=TOP, fill=BOTH) 

    if data[i,1]==self.gram_option.get(): 
     id = data [i,0] 
     Label(self.id_frame, text = id, background = "white").pack(side=LEFT, anchor = N) 

    if data[i,2]==self.shape_option.get(): 
     id = data [i,0] 
     Label(self.id_frame, text = id, background = "white").pack(side=LEFT, anchor = N) 

    if data[i,3]==self.meta_option.get(): 
     id = data [i,0] 
     Label(self.id_frame, text = id, background = "white").pack(side=LEFT, anchor = N) 

    if data[i,4]==self.cat_option.get(): 
     id = data [i,0] 
     Label(self.id_frame, text = id, background = "white").pack(side=LEFT, anchor = N) 

    else: Label(self.id_frame, text = 'Error: Not enough data', background = "white").pack(side=LEFT, anchor = N) 

私は...私の配列が正確に座標または誰かがPythonコードで上記のシナリオを配置する実行可能な方法を知っている私は、約2の期間にわたってこの質問に56個のビューを得ている を記載していないよ場合コミュニティからのコード作成のフィードバックはありません。うまくいけば、この新しいバージョンは、私が元々考えていたものと、調整が必要なものに対処します。

よろしくお願いいたします、

ジェフ

+0

エンゲインメント特性を考慮しましたか?これはPython(x、y)とともに出荷され、簡単なGUIの設計をはるかに簡単にします。 –

+0

あなたの質問はあまり明確ではありません。あなたが問題を抱えていると言うと、「ラジオボタンと配列が相互作用している」とはどういう意味ですか?どんな問題?どのようなやり取りですか?具体的には、何が起こりたくないのですか? –

+0

@Bill - 以前の編集内容を複製しました。 :) ロールバック。 – razlebe

答えて

0

この溶液を代わりに+の確率の比較を使用し、 - スコア - (すなわち、各細菌は、取得の+スコアと1-Xの確率を取得するXの確率を有します。 )しかし、このコードは、ラジオボタンをデータマトリックスに結びつけ、それに応じてトップ10のスコアリングバクテリアをランク付けします。すべての作品が協力している。

def idbuttonclick(self, event): 

    self.id_frame.destroy() 
    self.id_frame = Frame(self.main_right_frame, borderwidth=5, height=50, background="white") 
    self.id_frame.pack(side=TOP, fill=BOTH) 


    if (self.gram_option.get()=="+" and 
    self.meta_option.get()=="aerobe"): 
     Label(self.id_frame, text = "Gram Positive Aerobe", background = "white").pack(side=TOP, anchor = N) 


     bac=[('Aeromonas',0.95,0.05), 
     ('Bacillus',0.05, 0.95), 
     ('Hafnia',0.51, 0.51)] 



    else: Label(self.id_frame, text = "Error: Not enough data", background = "white").pack(side=TOP, anchor = N) 

    def plus(matrix, i): 
     return [row[i] for row in matrix] 

    def minus(matrix, i): 
     return [1.00-row[i] for row in matrix] 

    def average(lst): 
     return sum(lst)/len(lst) 

    bact=zip(*bac) 
    bact2=bact[0:1] 
    bact3=bact[0:1] 

    if self.cat_option.get()=="+": 
     bact2.append(plus(bac,1)) 
     bact3.append(plus(bac,1)) 
    if self.cat_option.get()=="--": 
     bact2.append(minus(bac,1)) 
     bact3.append(plus(bac,1)) 

    if self.oxi_option.get()=="+": 
     bact2.append(plus(bac,2)) 
     bact3.append(plus(bac,2)) 

    if self.oxi_option.get()=="--": 
     bact2.append(minus(bac,2)) 
     bact3.append(plus(bac,2)) 

    bac2=zip(*bact2) 
    bac3=zip(*bact3) 

    #experimental additive probability 
    #bac4 = [(bac2[0],reduce(mul,bac2[1:])) for bac2 in bac2] 

    #experimental mean probability 
    bac4 = [(bac2[0], average(bac2[1:])) for bac2 in bac2] 


    #experimental additive probability/expected outcome additive probability 
    #bac4 = [(bac2[0],reduce(mul,bac2[1:])/reduce(mul,bac3[1:])) for (bac2,bac3) in zip(bac2,bac3)] 

    bac5 = tuple(sorted(bac4, key=lambda item: item[1], reverse=True)) 


    Label(self.id_frame, text = bac5[0], background = "white").pack(side=TOP, anchor = W) 
    Label(self.id_frame, text = bac5[1], background = "white").pack(side=TOP, anchor = W) 
    Label(self.id_frame, text = bac5[2], background = "white").pack(side=TOP, anchor = W) 
    Label(self.id_frame, text = bac5[3], background = "white").pack(side=TOP, anchor = W) 
    Label(self.id_frame, text = bac5[4], background = "white").pack(side=TOP, anchor = W) 
    Label(self.id_frame, text = bac5[5], background = "white").pack(side=TOP, anchor = W) 
    Label(self.id_frame, text = bac5[6], background = "white").pack(side=TOP, anchor = W) 
    Label(self.id_frame, text = bac5[7], background = "white").pack(side=TOP, anchor = W) 
    Label(self.id_frame, text = bac5[8], background = "white").pack(side=TOP, anchor = W) 
    Label(self.id_frame, text = bac5[9], background = "white").pack(side=TOP, anchor = W) 
    Label(self.id_frame, text = bac5[10], background = "white").pack(side=TOP, anchor = W) 
関連する問題