Tk 버튼 기능에서 생성 된 가져온 텍스트를 Tk 텍스트로 표시

Ceirlyn

저는 파이썬 프로그래밍이 처음입니다. 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호출을 가지고 놀았 던 이유 입니다.

귀하의 문제를 해결하기 위해 귀하 callbackimport_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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

다른 Tk 인스턴스에서 Tk 인스턴스를 호출하면 텍스트 변수 설정 문제가 발생합니다.

분류에서Dev

Kivy에서 RecycleView로 생성 된 버튼의 텍스트 변경

분류에서Dev

동적으로 생성 된 버튼을 통해 동적 텍스트 필드의 ID 가져 오기

분류에서Dev

프로그래밍 방식으로 추가 된 버튼에 텍스트가 표시되지 않음

분류에서Dev

Tkinter에서 목록 용으로 생성 된 버튼의 텍스트를 업데이트하는 방법

분류에서Dev

Tk 버튼의 기능을 실행하고 그 안에 레이블을 만들 때 GUI가 즉시 업데이트되지 않습니다.

분류에서Dev

생성 된 div의 텍스트 옆에 버튼 배치

분류에서Dev

스크롤 막대 만 표시하도록 Tk ()를 기준으로 텍스트 위젯의 크기를 완벽하게 조정합니다.

분류에서Dev

도구 버튼과 연결된 QT에서 컨텍스트 메뉴를 동적으로 생성

분류에서Dev

jquery 모바일에서 동적으로 생성 된 버튼 텍스트를 변경할 수 없습니다.

분류에서Dev

다른 입력 텍스트에서 난수를 생성하고 표시된 난수가 고유한지 확인

분류에서Dev

tcl / tk : "tab"으로 GUI를 생성 할 수있는 tk 위젯

분류에서Dev

동적으로 생성 된 텍스트 요소에서 val () 가져 오기

분류에서Dev

별도의 스레드에 큰 파일의 텍스트를 삽입 할 때 tk UI가 중단됨

분류에서Dev

동적으로 생성 된 버튼 텍스트

분류에서Dev

버튼 오버레이가 버튼 텍스트, SwiftUI 위에 표시됩니다.

분류에서Dev

Tcl / Tk 텍스트 위젯에서 바인딩 재정의

분류에서Dev

텍스트 필드에 텍스트가 포함 된 경우에만 버튼 활성화

분류에서Dev

루프에서 생성 된 tk 입력 필드의 내용에 어떻게 액세스합니까?

분류에서Dev

자바 스크립트에 설정된 레이블 텍스트가 서버 측에 레이블 텍스트를 표시하지 않음

분류에서Dev

텍스트 파일에서 가져온 목록 표시 변경

분류에서Dev

tk 텍스트 위젯에서 bind를 사용하여 함수 호출

분류에서Dev

버튼 (내가 작성한 것처럼이 입력에 텍스트를 삽입하는)을 사용하여 JQuery 스크립트 (입력에서 텍스트 쓰기 필터 / 강조 표시)를 트리거합니까?

분류에서Dev

Tk를 사용하여 Perl에서 버튼 / 체크 박스를 연속으로 정렬하기

분류에서Dev

대화 버튼에 텍스트가 표시되지 않는 jQuery 1.9.1이 포함 된 jQuery UI 1.9.1

분류에서Dev

Angular.js에서 이미지 버튼 클릭시 헤더 텍스트를 편집 가능하게 만들기

분류에서Dev

동적으로 생성 된 버튼에 부트 스트랩 툴팁 추가

분류에서Dev

HTML 버튼 및 자바 스크립트를 사용하여 Span 클래스 태그로 래핑 된 HTML 텍스트 표시 / 숨기기 전환

분류에서Dev

tk_messageBox가 그리드보기에서 잘못된 표시를 표시하지만 팩에서는 괜찮습니다.

Related 관련 기사

  1. 1

    다른 Tk 인스턴스에서 Tk 인스턴스를 호출하면 텍스트 변수 설정 문제가 발생합니다.

  2. 2

    Kivy에서 RecycleView로 생성 된 버튼의 텍스트 변경

  3. 3

    동적으로 생성 된 버튼을 통해 동적 텍스트 필드의 ID 가져 오기

  4. 4

    프로그래밍 방식으로 추가 된 버튼에 텍스트가 표시되지 않음

  5. 5

    Tkinter에서 목록 용으로 생성 된 버튼의 텍스트를 업데이트하는 방법

  6. 6

    Tk 버튼의 기능을 실행하고 그 안에 레이블을 만들 때 GUI가 즉시 업데이트되지 않습니다.

  7. 7

    생성 된 div의 텍스트 옆에 버튼 배치

  8. 8

    스크롤 막대 만 표시하도록 Tk ()를 기준으로 텍스트 위젯의 크기를 완벽하게 조정합니다.

  9. 9

    도구 버튼과 연결된 QT에서 컨텍스트 메뉴를 동적으로 생성

  10. 10

    jquery 모바일에서 동적으로 생성 된 버튼 텍스트를 변경할 수 없습니다.

  11. 11

    다른 입력 텍스트에서 난수를 생성하고 표시된 난수가 고유한지 확인

  12. 12

    tcl / tk : "tab"으로 GUI를 생성 할 수있는 tk 위젯

  13. 13

    동적으로 생성 된 텍스트 요소에서 val () 가져 오기

  14. 14

    별도의 스레드에 큰 파일의 텍스트를 삽입 할 때 tk UI가 중단됨

  15. 15

    동적으로 생성 된 버튼 텍스트

  16. 16

    버튼 오버레이가 버튼 텍스트, SwiftUI 위에 표시됩니다.

  17. 17

    Tcl / Tk 텍스트 위젯에서 바인딩 재정의

  18. 18

    텍스트 필드에 텍스트가 포함 된 경우에만 버튼 활성화

  19. 19

    루프에서 생성 된 tk 입력 필드의 내용에 어떻게 액세스합니까?

  20. 20

    자바 스크립트에 설정된 레이블 텍스트가 서버 측에 레이블 텍스트를 표시하지 않음

  21. 21

    텍스트 파일에서 가져온 목록 표시 변경

  22. 22

    tk 텍스트 위젯에서 bind를 사용하여 함수 호출

  23. 23

    버튼 (내가 작성한 것처럼이 입력에 텍스트를 삽입하는)을 사용하여 JQuery 스크립트 (입력에서 텍스트 쓰기 필터 / 강조 표시)를 트리거합니까?

  24. 24

    Tk를 사용하여 Perl에서 버튼 / 체크 박스를 연속으로 정렬하기

  25. 25

    대화 버튼에 텍스트가 표시되지 않는 jQuery 1.9.1이 포함 된 jQuery UI 1.9.1

  26. 26

    Angular.js에서 이미지 버튼 클릭시 헤더 텍스트를 편집 가능하게 만들기

  27. 27

    동적으로 생성 된 버튼에 부트 스트랩 툴팁 추가

  28. 28

    HTML 버튼 및 자바 스크립트를 사용하여 Span 클래스 태그로 래핑 된 HTML 텍스트 표시 / 숨기기 전환

  29. 29

    tk_messageBox가 그리드보기에서 잘못된 표시를 표시하지만 팩에서는 괜찮습니다.

뜨겁다태그

보관