2017-03-01 9 views
0

私はPythonに戻ろうとしていますが、私はオブジェクトを互いにアクセス可能にする前にこの問題を抱えています。この簡単な例では、ボタンとテキストボックスを持つパネルを表示しています。テキストボックスをクリックすると、データベースに照会し、取り出されたデータとともにカーソルを戻す機能が呼び出されます。 LookupSQL関数またはShowClientData関数のどちらかがこの出力をループでテキストボックスに書き込むようにする必要があります。 TextBox(outputBox)は現在、他のどの関数でも不明です。他の機能がそれが何であるかを知るようにするにはどうすればよいですか?あなたはdata attributesと呼ばれている探しているものをwxPython:出力ボックスにSQLコマンドの結果を書き込んでください

import wx 
import pypyodbc 
conn = pypyodbc.connect(driver='{SQL Server}', server='.', database='TheDB', uid='sa', pwd='Pass') 


class Audit(wx.Frame): 

def __init__(self, *args, **kwargs): 
    super(Example, self).__init__(*args, **kwargs) 

    self.InitUI() 

def InitUI(self):  

    panel = wx.Panel(self) 

    hbox = wx.BoxSizer() 
    sizer = wx.GridSizer(6,1,2,2) 

    btn1 = wx.Button(panel, label='Clients') 

    outputBox = wx.TextCtrl(panel, -1, style = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL) 
    sizer.AddMany([btn1, btn2, btn3, btn4, btn5, btn6]) 

    hbox.Add(sizer, 0, wx.ALL, 15) 
    hbox.Add(outputBox, 1, wx.EXPAND) 


    panel.SetSizer(hbox) 

    btn1.Bind(wx.EVT_BUTTON, self.ShowClientData) 

    self.SetSize((800, 600)) 
    self.SetTitle('Audit View') 
    self.Centre() 
    self.Show(True) 


def ShowClientData(self, event): 
    SQL = 'select * from V_UpdatedClient' 
    recursor = lookupSQL(SQL) 
    for row in recursor: 
     rChange = row[0] 
     rItemType = row[1] 
     rPK = row[2] 
     rItemCode = row[3] 
     rFieldName = row[4] 
     rOldValue = row[5] 
     rNewValue = row[6] 
     rUpdateDate = row[7] 
     rUserName = row[8] 
     print('%s %s %s %s %s %s %s %s %s' % (rChange, rItemType, rPK, rItemCode, rFieldName, rOldValue, rNewValue, rUpdateDate, rUserName)) 


def lookupSQL(SQLString):  
    cursor = conn.cursor() 
    cursor.execute(SQLString) 

    return cursor   
    cursor.close() 


def main(): 

    ex = wx.App() 
    Audit(None) 
    ex.MainLoop()  


if __name__ == '__main__': 
    main() 

答えて

1

self.outputBox = wx.TextCtrl(panel, -1, style = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL) 

そしてShowClientData以内にあなたは、限り、あなたはself参照、あなたがその属性にアクセスできることを持っているよう

self.outputBox.AppendText("some text")

を書くことができます。

編集:

あなたは上記の変更を行うと、あなたはもうただoutputBoxにより、テキストボックスを参照することができない、あなたの代わりに、自己を経由してアクセスする必要があります

hbox.Add(self.outputBox, 1, wx.EXPAND)

それを宣言します世界的に非常に悪いです!

+0

ShowClientDataは、それが定義され、自己で呼び出されたときにそれを認識しません。 が NameError:名前が「outputBox」私はグローバルとしてoutputBox宣言してみました、それが働いていたが、私はそれが良い練習 – pickarooney

+0

は私の編集を参照してくださいだかわからない が定義されていない、あなたは自己を経由して、 'outputBox'にアクセスし、そのことを行う必要がありますそれが使われている場所であればどこでも変更できます。 –

+0

はまだエラーが発生しています self.outputBox.WriteText( '%s%s%s%s%s%s%s%s%s%s \ n'%(rChange、rItemType、rPK、rItemCode、rFieldName、rOldValue、rNewValue 、rUpdateDate、rUserName)) NameError:名前 'self'が定義されていません – pickarooney

関連する問題