2014-01-31 82 views
0

我很難從另一個python腳本中的一個函數傳遞變量到另一個函數。我已閱讀其他答案,但他們並沒有真正幫助這個問題。將變量傳遞給另一個Python腳本

這是第一個文件欲變量發送至(爲清楚起見省略了一些代碼)

# TestGUI.py 

from Tkinter import * 
import serial 
import os 

class Testgui: 
    def __init__(self, master): 

    def writetoBOT(self,instruct): 
     ser = serial.Serial(6) 
     ser.baudrate = 9600 
     ser.parity = serial.PARITY_NONE #set parity check: no parity 
     ser.timeout = 1   #non-block read 
     ser.writeTimeout = 2  #timeout for writ 

     if(ser.isOpen() == False): 
      ser.open() 
      print ser.portstr  # check which port was really used 
      ser.write(instruct) 
     else : 
      ser.write(instruct) 

這是sceond文件:

# TestGUI_2.py 

from TestGUI import Testgui 

class Tracker: 
    def __init__(self): 
     pass 
    def drive(self,cords, cords1): 
     while(cords >= 320):   
      l='l' 
      Testgui.writetoBOT(l)  # This is the problem line 

類型錯誤:未結合的方法writetoBOT()必須使用TestGUI實例作爲第一個參數調用(代替str實例)

+0

你有2個文件,但你正在嘗試執行*一個*腳本,對吧?你的描述很混亂。 –

回答

4

writetoBOT需要2個參數:selfinstruct。 與Testgui實例調用它:

tgui=Testgui(your_master) 
tgui.writetoBOT(l) 

如果你想與Testgui類來調用它,你仍然需要通過的Testgui一個實例:

tgui=Testgui(your_master) 
Testgui.writetoBOT(tgui, l) 
+0

(your_master)是調用類嗎?在這種情況下Tracker()? –

+0

@ user3257360這是構建Testgui實例時需要傳遞的參數。參見'def __init __(self,master)'。你不是寫這段代碼的嗎? – zhangxaochen

+0

爲了修復我的代碼,我創建了另一個名爲writetoSerial()的類,並在其中放入了串行編寫代碼。然後導入函數,然後調用它:從TestGUI_2導入writetoSerial然後調用函數:l ='l' t = writetoSerial() t.writetoBOT(l) –

0

或者,您也可以讓普通的空間這兩個腳本,它通過ACN數據庫 - sqllite

例如,

# file1.py 
import sqlite3 

con = sqlite3.connect('messages.db') 
cur = con.cursor() 
#cur.execute('CREATE TABLE message (id INTEGER PRIMARY KEY, name TEXT, content TEXT, read INTEGER)') 
#con.commit() 


for x in range(100000): 
    if x in range(1, 500): 
     cur.execute('INSERT INTO message (id, name, content, read) VALUES(NULL, "Guido", "van Rossum", 0)') 
     con.commit() 

# file2.py 
import sqlite3 
import time 

con = sqlite3.connect('messages.db') 
cur = con.cursor() 

def listen(): 
    messages = cur.execute('SELECT * FROM message WHERE read=0') 
    if not messages: 
     return False 
    for m in messages: 
     print 'get message ', m 
     cur.execute("UPDATE message SET read=1 WHERE id=?", m[0])   
     con.commit() 
     print 'update db' 
    return True 

while True: 
    listen() 
    time.sleep(5) 
0

您聲明爲Testgui作爲一個類。這應該被理解爲骨架或線框(注意,這是一條捷徑,而不是現實)。您需要首先從該骨架中創建一個「真實」對象才能使用它。

testgui=Testgui(amaster) 

在類中可能有在類級應用的方法(綁定函數)。這些被稱爲靜態方法或類方法。他們必須用蟒蛇裝飾。

查看http://en.wikipedia.org/wiki/Object_oriented_programming瞭解更多信息。

相關問題