2017-10-16 7 views
0

tkinter로 엔트리 위젯을 만드는 데 어려움이 있습니다. 필요한 모듈을 가져 왔고 이미 여러 버튼과 확인란을 만들었습니다. 그러나 항목을 제대로 초기화하는 방법을 알아낼 수 없습니다. 여기 내 관련 코드입니다 : 내가 어떤 역 추적을 보이지 않아요tkinter로 엔트리 위젯을 만들 수 없습니다.

# Necessary Modules.------------------------------------------------------------ 
import win32com.client as win32 
import re 
from tkinter import * 
from tkinter.filedialog import askopenfilename 
import tkinter.messagebox 


# Class for selecting the file.------------------------------------------------- 
class FilenameClass(): 
    def __init__(self): 
     self.location = 'User Import.txt' 

    def getFile(self, identity): 
     self.file_opt = options = {} 
     options['defaultextension'] = '.txt' 
     options['filetypes'] = [('Text Document (.txt)', '.txt'), 
           ('all files', '.*')] 
     self.filename = askopenfilename(**self.file_opt) 
     if self.filename: 
      if 'User Import' in identity: 
       self.location = self.filename 
       app.get_txt_File['bg'] = '#0d0' 
       user_file = open(self.filename, 'r') 
       user_total = user_file.read() 
       remove_lines = user_total.splitlines() 
       for user in remove_lines: 
        regex_tab = re.compile('\\t') 
        user_info = regex_tab.split(user) 
        app.users.append(user_info) 
      else: 
       app.loadButton['bg'] = '#e10' 


# Main Class.------------------------------------------------------------------- 
class Application(Frame, Tk): 
    def __init__(self, master=None): 
     Frame.__init__(self, master) 
     self.users = [] 
     self.fileOBJtxt = FilenameClass() 
     self.createWidgets() 

    def createWidgets(self): 

     # Define the default values for the options for the buttons 
     # Grid layout options 
     self.rowconfigure(0, minsize=5) 
     self.width = 54 
     self.grid(padx=5) 
     self.loadButton_gopt = {'row':1,'column':1,'padx': 2, 'pady': 5} 
     self.loadButton_wopt = {'width': round(self.width),'bg':'#e10'} 
     self.loadButton() 
     self.trainingCheckBox() 
     self.signatureInput() 

    def loadButton(self): 
     '''Button that calls the filename class which allows the user to select 
     the text file they wish to use.''' 

     self.get_txt_File = Button(self, text="Load User List", \ 
     command=lambda: self.fileOBJtxt.getFile('User Import')) 
     for key, value in self.loadButton_wopt.items(): 
      self.get_txt_File[key] = value 
     self.get_txt_File.grid(**self.loadButton_gopt) 

    def trainingCheckBox(self): 

     self.training_var = IntVar() 
     self.training = Checkbutton(text="Include training video?", \ 
     variable=self.training_var).grid(row=2, sticky=W) 

    def signatureInput(self): 

     Label(text="Signature Name").grid(row=4, sticky=W) 
     entry = Entry(bg='#fff', width=50) 
     entry.grid(row=4, column=1, columnspan=4)  

# Initialization parameters.---------------------------------------------------- 
if __name__ == '__main__': 
    app = Application() 
    app.master.title('User Notification Tool') 
    app.master.geometry('405x550+100+100') 
    app.master.resizable(width=False, height=False) 
    app.mainloop() 

,하지만 난 표시 내 입력 상자를 얻을 수없는 것. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

편집 : 전체 코드가 추가되었습니다.

+1

나머지 코드를 표시 할 수 있습니까? – mentalita

+0

물론, 나머지 코드는 제 편집을 참조하십시오. – NoOrangeJuice

답변

2

하여 입력 필드의 문제에 당신은에 배치 할 것을 프레임/창을 말하지 않았다

변경 :.

entry = Entry(bg='#fff', width=50) 

수신자 :

entry = Entry(self, bg='#fff', width=50) 

항상 위젯이 배치 될 창/프레임을 첫 번째 인수로 제공해야합니다. 이 경우 자체는 프레임을 나타 내기 때문에 self입니다.

클래스 속성으로 정의하지 않았기 때문에 프로그램에서 입력 필드 안의 문자열을 get() 수 없습니다.

self.entry = Entry(self, bg='#fff', width=50) 
self.entry.grid(row=4, column=1, columnspan=4)  

읽을 수 있도록 이러한 변화는 응용 프로그램의 나머지 부분에 대한 위해 필요하다 나 : 여기에

entry = Entry(bg='#fff', width=50) 
entry.grid(row=4, column=1, columnspan=4)  

: 그래서 가장 가능성이 당신이

이를 변경해야합니다 입력 위젯에 쓰십시오.

+0

건배는 완벽하게 작동했습니다. 마스터스를 사용하는 대신 자신을 제공해야한다는 사실을 잘 알고 있습니다. 엔트리 속성을 잡아 주어 줘서 고마워, 아직'get()'을 구현하지는 않았지만 나에게 시간을 절약 해 줬다. – NoOrangeJuice

-1

변경

entry = Entry(bg='#fff', width=50) 

entry = tk.Entry(bg='#fff', width=50) 
+0

그 일을 시도했지만 정의되지 않은 오류가 발생합니다. 체크 박스를 만들 때'Checkbutton' 만 있으면됩니다. 'Entry'가 특별히'tk '를 요구하는 이유가 있을까요? 귀하의 회신에 감사드립니다. – NoOrangeJuice

+0

사람 : OP가 'tkinter as tk'를 가져 오지 않고 *로 가져 오기 때문에 정확하지 않습니다. –

+0

답변을 게시 할 때 가져 오기 선이 없으며 Application (Frame, Tk) 클래스에 있습니다. 전 가정을했습니다 – person