2014-01-31 5 views
0

한 파이썬 스크립트의 한 함수에서 다른 함수로 변수를 전달하는 데 어려움이 있습니다. 나는 다른 답변을 읽었지 만 그들은이 주제에 정말로 도움이되지 못했습니다.다른 파이썬 스크립트에 변수 전달하기

# 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.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 인스턴스를 첫 번째 인수로 호출해야합니다 (대신 str 인스턴스가 있음)

+0

2 개의 파일이 있지만 * 하나의 스크립트를 실행하려고합니다. 맞습니까? 귀하의 설명은 매우 혼란 스럽습니다. –

답변

4

writetoBOTself 및인수를가집니다.. 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을 참조하십시오.

관련 문제