2016-08-16 36 views
1

我已經用tkinter GUI編寫了一個簡單的程序。整個代碼位於一個大模塊中,我想將它分成兩個或三個模塊,以將邏輯從GUI中分離出來。 這是示例代碼:Python - 如何從另一個模塊中的文本字段獲取值

main.py:

import gui 
inst1 = gui.guitest() 

gui.py:

import tkinter, defs 

class guitest: 
    def __init__(self): 
     win1 = tkinter.Tk() 
     self.field1 = tkinter.Text(win1) 
     self.field1.grid(column = 0, row = 0) 
     self.but1 = tkinter.Button(win1, text='click', 
     command=defs.getVar) 
     self.but1.grid(column = 1, row = 0) 
     win1.mainloop() 

defs.py:

def getVar(): 
    captured = str(field1.get(1.0)) 

我不能讓getVar上班;我希望它從文本字段獲得值,但在嘗試不同的解決方案後,我得到的是名稱或屬性錯誤。 有沒有可能使它以這種方式工作?或者,也許我的想法是完全錯誤的?如果是,那麼請讓我知道如何去做。我想知道這個代碼是否有更多的問題。

回答

1

好吧,讓我們從頭開始,這裏是你的代碼的工作示例:

import tkinter 


class guitest: 

    def __init__(self): 
     win1 = tkinter.Tk() 
     self.field1 = tkinter.Text(win1) 
     self.field1.grid(column=0, row=0) 
     self.but1 = tkinter.Button(win1, text='click', command=self.getVar) 
     self.but1.grid(column=1, row=0) 
     win1.mainloop() 

    def getVar(self): 
     captured = str(self.field1.get("1.0", tkinter.END)) 
     print captured 

inst1 = guitest() 

現在,在打破這段代碼,你應該問自己,如果你想的理由是足夠強大。如果你的答案是肯定的(認爲這兩次)一個可能的方式做到這一點會是這樣:


# main.py 
import gui 
inst1 = gui.guitest() 

# gui.py 
import tkinter 
import defs 

class guitest: 

    def __init__(self): 
     win1 = tkinter.Tk() 
     self.field1 = tkinter.Text(win1) 
     self.field1.grid(column=0, row=0) 
     self.but1 = tkinter.Button(win1, text='click', command=self.getVar) 
     self.but1.grid(column=1, row=0) 
     win1.mainloop() 

    def getVar(self): 
     defs.getVar(self) 

# defs.py 
import tkinter 


def getVar(guitest_inst): 
    captured = str(guitest_inst.field1.get("1.0", tkinter.END)) 
    print captured 

但同樣,三思而後行纔打破像這樣的小部件...只是說:)

+0

非常感謝!正如我在開始時提到的,我的程序很簡單,但源文件變大了,上面的代碼只是一個例子,所以拆分它是合理的:-) – Marek

相關問題