>

이것은 파이썬에서 처음 실행 한 것이며 결코 코드 작성자가 아닙니다. 나는 arduino를 명령하기 위해 GUI를 작성 해야하는 프로젝트를 가지고 있으며 많은 인터넷 검색 및 코드를 함께 연결 한 후 IDLE에서 실행될 때 완벽하게 작동하는이 프로그램을 만들었습니다. Windows (두 번 클릭) 또는 Linux (명령 줄 python3 filler.py를 통해)에서 시작하면 오류가있는 것처럼 열리고 닫힙니다. 동일한 방법으로 문제없이 다른 파이썬 프로그램을 시작할 수 있습니다. 하드웨어를 작동시키기 위해 IDLE에서 시작하는 것이 문제가되지 않지만 향후 프로젝트를 위해 파이썬에 대해 더 잘 알고 싶습니다. 도움을 주시면 대단히 감사하겠습니다.

import tkinter as tk
import serial as s
import time as t
from tkinter import *

class Action:
    def __init__(self):

        def on():
            ser.write(b'7')
        def exit():
            ser.close() # close serial port
            quit()
        self.window = Tk()
        self.window.title("Moore Speciality Brewing")
        self.window.geometry('640x480')
        self.lbl = Label(self.window, text="Can Filler",fg='black',font=(None, 15))
        self.lbl.place(relx=0.24, rely=0.10, height=50, width=350)
        bo = Button(self.window, text="Fill Can", width=10 ,bg='red' ,command=on)
        bo.place(relx=0.34, rely=0.30, height=40, width=200)
        ext = Button(self.window, text="Exit", width=10, bg='white', command=exit)
        ext.place(relx=0.34, rely=0.50, height=40, width=200)
class Prompt(tk.Tk):
    def __init__(self):
        global comm
        comm = None               
        tk.Tk.__init__(self)
        self.geometry('640x480')
        self.label = tk.Label(self, text="Comm Port",fg='black',font=(None, 15))
        self.entry = tk.Entry(self)
        self.button = tk.Button(self, text="Get", command=self.on_button)
        self.entry.place(relx=.5, rely=.5,anchor="center" )
        self.label.place(relx=.5, rely=.44,anchor="center")
        self.button.place(relx=.5, rely=.56,anchor="center")
    def on_button(self):
        comm = self.entry.get()
        global ser
        ser = s.Serial(comm, 9600, timeout=0)   # check your com port
        t.sleep(2)
        Action()
        self.destroy()
Prompt()

  • 답변 # 1

    메인 루프를 호출해야합니다.
    Prompt() 에 대한 통화를 제거  (마지막 줄)을 다음과 같이 바꾸십시오 (스크립트 하단) :

    if __name__ == "__main__":
        prm = Prompt()
        prm.mainloop()
    
    

    여기에서 tkinter mainloop에 대해 더 자세히

  • 답변 # 2

    코드에서 이미 시간을 가져 왔습니다. 그냥 t.sleep(60) 를 사용하십시오  코드의 끝에 cli가 오류가 있는지 확인하고 디버그하도록 기다립니다.

    결국 Prompt()  정확하지 않습니다. 다음과 같이 사용하십시오 :

    myPrompt = Prompt()
    myPrompt.mainloop()
    
    

    이 부분은 실제로 tkinter gui를 호출합니다.

관련 자료

  • 이전 java - if 조건 where 절을 사용한 MySQL 쿼리
  • 다음 등록 된 서버는 어디에 저장됩니까?