"root"또는 "app"와 mainloop을 별도의 프레임 대신 Frame이있는 클래스에 포함하고 "if __name .."호출을하는 것이 좋습니까?Python GUI 및 클래스 구조
예 :
class App:
def __init__(self):
self.root = Tkinter.Tk()
self.root.title("Color Send to Arduino")
"root"또는 "app"와 mainloop을 별도의 프레임 대신 Frame이있는 클래스에 포함하고 "if __name .."호출을하는 것이 좋습니까?Python GUI 및 클래스 구조
예 :
class App:
def __init__(self):
self.root = Tkinter.Tk()
self.root.title("Color Send to Arduino")
Frame
에서 상속 클래스에서 앱 코드를 삽입하는 좋은 이유는 코드를 더욱 재사용 할 수 있다는 점이다. 별다른 번거 로움없이 모든 Tkinter GUI 루트에 삽입 할 수 있습니다. app.py
import Tkinter as tk
class App(tk.Frame):
def __init__(self,parent):
tk.Frame.__init__(parent)
self.parent = parent
def initialise(self):
pass
예를 들어
및 other_app.py
from app import App
import Tkinter as tk
if __name__ == "__main__":
root = tk.Tk()
myapp = App(root)
myapp.pack()
root.mainloop()
편집에
은 아래 내 의견과 함께 이동하려면, 재사용 가능한 응용 프로그램 (매우 간단이기는하지만) 실제는 것 시계.WelcomeClock
클래스는
tk.Frame
에서 상속으로
import Tkinter as tk
import getpass
import time
class WelcomeClock(tk.Frame):
def __init__(self,parent):
tk.Frame.__init__(self,parent)
self.parent = parent
self.timevar = tk.StringVar()
self.__set_time()
self.initialize()
def initialize(self):
message = "Welcome %s!\nThe time is currently"%(getpass.getuser().capitalize())
self.welcome = tk.Label(self,text=message)
self.welcome.pack(anchor=tk.N)
self.clock = tk.Label(self,textvar=self.timevar)
self.clock.pack()
def __set_time(self):
self.timevar.set(time.strftime("%Y-%m-%d %H:%M:%S"))
self.after(499,self.__set_time)
if __name__ == "__main__":
root = tk.Tk()
clock = WelcomeClock(root)
clock.pack()
root.mainloop()
난 쉽게 가져올 내가 사용하는 다른 Tkinter의 GUI로 팩을 할 수 있습니다.
당신이이 클래스의 객체를 생성하여 여러 시간이이 방법을 사용할 수 있습니다 class
를 사용하여.
import Tkinter
class simpleapp_tk(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
pass
if __name__ == "__main__":
app = simpleapp_tk(None)
app.title('my application')
app.mainloop()
위대한 예! 따라서 코드의 재사용을 가능하게하여 app.py에 클래스의'root = tk.Tk()'와'root.mainloop()'를 남겨 두는 것이 더 낫겠습니까? 아니면 other_app.py에서'myapp = App()'를 쓸 수 있기 때문에 포함시켜야합니까? 죄송합니다 나는 GUI 디자인과 OOP에 익숙하지 않다. ... – mECH
개인적으로 나는 클래스에서 벗어나서 if 문 (코드에 추가 한 것과 같음)에 넣어 둘 수 있으므로 실제로 실행중인 파일. 이것에 대해 생각해 볼 수있는 좋은 방법은 GUI에 여러 개의 "응용 프로그램"을 갖고 싶을 수 있지만'root.mainloop'을 한 번만 실행하고 싶다는 것입니다. 위의 디자인을 사용하면 약간의 번거 로움없이 GUI에서 앱을 추가하거나 제거 할 수 있습니다. – ebarr