Python 2.11を使用してTkinterでGUIを作成し、OOPアプローチを使用して継承を学習しようとしています。下のGUIには、2つのエントリウィジェットがあります。 "Enter Value - Not Return"というラベルの付いた最初のウィジェットは、Tkinter Entry Classから継承するEntryFieldクラスを使用します。この入力ボックスに値を入力すると、setDesVolメソッドが呼び出されますが、self.desVの値は返されません。他のステートメントを試してみると、self.desV = self.parent.get()(コメントアウトされています)では、MainWindowインスタンスにはget属性がないというエラーが返されます。Tkinterでエントリーボックスウィジェットを継承する際の問題
オブジェクトentValueに割り当てられた次のエントリウィジェットを呼び出すと、これはMainWindowクラスに含まれており、メソッドsetValueとself.entValue.get()が意図したとおりに機能するため完全に正常に機能します。
エントリーボックスから値を取得するためにEntryFieldクラスで間違っていることを知っている人はいませんか?私の計画は最終的なGUIに多くの入力ボックスを持ち、各エントリーボックスにsetDesVolなどの独自の関連メソッドを持たせて、コードをよりきれいにして管理しやすくすることです。私はこれを理解しようと約3日を費やしているので、どんな助けにも感謝しています。コードは以下に添付されています。おかげEntryField
クラスで
import Tkinter as tk
import ttk
import tkMessageBox as mBox
class MainWindow(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.parent = parent
self.olFrame = tk.LabelFrame(text = 'Open Loop Frame', bg = 'red')
self.olFrame.grid(column = 0, row = 0, sticky = 'w')
self.voltLabel = tk.Label(self.olFrame,
text = 'Enter Value - Does Not Return ',
font = ("Times", 10), bg = 'red').grid(column = 0, row = 1)
#entry box code that does not return anything
self.entDesVolt = EntryField(self.olFrame,bg = 'red')
self.entDesVolt.bind("<Return>", EntryField(self).setDesVol)
self.entDesVolt.grid(column = 1, row = 1)
#this entry box code works fine
self.mezLabel = tk.Label(self.olFrame,
text = 'Enter Another Value - works right ',
font = ("Times", 10), bg = 'grey').grid(column = 0, row = 2)
self.entValue = tk.Entry(self.olFrame, bg = 'grey')
self.entValue.bind("<Return>", self.setValue)
self.entValue.grid(column = 1, row = 2)
def setValue(self, event):
print self.entValue.get()
print 10 + float(self.entValue.get())
class EntryField(tk.Entry):
def __init__(self, parent, *args, **kwargs):
tk.Entry.__init__(self, parent, *args, **kwargs)
self.parent = parent
print "self.parent in EntryField is type: ", type(self.parent)
def setDesVol(self,event):
self.desV = EntryField(self).get() #doesnt return anything in print statement
#self.desV = self.parent.get() #MainWindow instance has no attribute get
#self.desV = tk.Entry(self).get() #doesnt return anything in print statement
print "self des V is: ", self.desV
root = tk.Tk()
root.geometry('500x400')
root.title('Test GUI')
root.configure(background = "black")
a = MainWindow(root)
root.mainloop()