2017-10-16 8 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() 

私は、任意のトレースバックを見ていないんだけど、私が表示されるまで、私の入力ボックスを取得するように見えることはできません。私は間違って何をしていますか?

EDIT:コード全体が追加されました。

+1

残りのコードを表示できますか? – mentalita

+0

確かに、残りのコードについては私の編集を参照してください。 – NoOrangeJuice

答えて

2

ご入力フィールドに問題がありますが中に配置することが何フレーム/ウィンドウにそれを告げていない

変更:。

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

To:

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

これはうまくいきました。マスターを使用する代わりに、私はまだ自己を提供する必要があることを知ってよかったです。 entry属性もキャッチしてくれてありがとう、私はまだ 'get()'を実装していませんが、あなたは私をしばらく保存しました。 – NoOrangeJuice

-1

変更

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

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

私はそれをやってみましたが、私は未定義のエラーが発生しています。チェックボックスを作成したときには、 'Checkbutton'だけが必要です。 'Entry'が特に' tk'を必要とする何らかの理由はありますか?お返事をありがとうございます。 – NoOrangeJuice

+0

person:これはOPが 'tkinter as tk'をインポートしておらず、*としてインポートしているので正確ではありません。 –

+0

私が答えを投稿したとき、インポートラインはそこにはなく、Application(Frame、Tk)クラスでした。私は前提を作った – person

関連する問題