저는 파이썬 프로그래밍이 처음입니다. Button click 명령으로 텍스트 파일을 가져 와서 Text 위젯에 표시하는 샘플 프로젝트를 만들고 싶습니다. Button 함수는 ButtonAction이라는 다른 클래스에 있으며 위젯은 Window라는 다른 클래스에서 생성됩니다. 문제는 가져온 데이터를 추가 할 수 있도록 기존 텍스트 위젯을 가져 오는 방법을 모르겠다는 것입니다.
일부 서식 코드를 제거했습니다.
암호:
from tkinter.filedialog import *
class Window(Frame):
def __init__(self):
super().__init__()
self.initgui()
def initgui(self):
self.pack(fill=BOTH, expand=True)
textarea = Text(self)
textarea.grid(row=0, column=0, columnspan=2, rowspan=4,
padx=10, pady=10, sticky=E + W + S + N)
imprtbutton = Button(self, text="Import XML", command=ButtonAction().import_onclick)
imprtbutton.grid(row=0, column=2, padx=5, sticky=S)
class ButtonAction:
def __init__(self):
pass
def import_onclick(self):
file = askopenfile(mode='r')
if file is not None:
content = file.read()
print(content) #just so i can see if i successfully imported my txt file
if __name__ == '__main__':
root = Tk()
root.geometry("500x500+300+200")
root.title("Test Project")
gui = Window()
root.mainloop()
안녕하세요, Stackoverflow에 오신 것을 환영합니다.
스크립트를 시작했을 때 "Import XML"버튼이 전혀 보이지 않았습니다. 먼저 창 크기를 조정해야했습니다. 그것이 내가 당신의 코드에서 .pack
및 .grid
호출을 가지고 놀았 던 이유 입니다.
귀하의 문제를 해결하기 위해 귀하 callback
의 import_onclick
방법에 인수 를 추가했습니다 . 이것은 ButtonAction
클래스가 데이터를 클래스에 다시 반환 하는 수단을 제공합니다 Window
. 여기서 새로운 메서드 update_text
는의 내용을 채우는 역할을합니다 textarea
.
이제에 대한 추가 인수가 필요하기 때문에 import_onclick
이전 ButtonAction().import_onclick
인수를 람다로 래핑했습니다 .
lambda: ButtonAction().import_onclick(self.update_text)
결과 코드가 잘 작동합니다.
from tkinter.filedialog import *
class Window(Frame):
def __init__(self):
super().__init__()
self.textarea = Text(self)
self.initgui()
def initgui(self):
self.pack(fill=BOTH, expand=True)
self.textarea.pack(side=LEFT, padx=5, pady=5)
import_button = Button(self,
text="Import XML",
command=lambda: ButtonAction().import_onclick(self.update_text)
)
import_button.pack(side=RIGHT, padx=5, pady=5)
def update_text(self, text):
self.textarea.delete(1.0, END)
self.textarea.insert(END, text)
class ButtonAction:
def __init__(self):
pass
def import_onclick(self, callback):
file = askopenfile(mode='r')
if file is not None:
content = file.read()
# just so i can see if i successfully imported my txt file
print(f"read {len(content)} lines")
callback(content)
if __name__ == '__main__':
root = Tk()
root.title("Test Project")
gui = Window()
root.mainloop()
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다