본문 바로가기

프로젝트 이야기/드론을 이용한 식물 이상 탐지 시스템

드론을 이용한 식물 이상 탐지 시스템 - DBwindow 구현

마지막 Widget인 DBwindow 구현에 관해 다루겠습니다.

DBwindow는 See Datamap 버튼을 누르면 나타나는 Widget입니다.

위와 같이 구성되어 있으며

리스트에서 데이터가 저장된 날짜를 선택하여 See Datamap 버튼을 누르면

Mainwindow에 분석 결과가 출력됩니다.

 

코드 전문은 아래와 같이 구성되어 있습니다.

class DBWindow(Ui_DBwindow):
    def __init__(self, w3):
        self.url = ""

        Ui_DBwindow.__init__(self)
        self.Dialog = w3
        self.setupUi(self.Dialog)

        self.seeButton.clicked.connect(self.DataSee)
        self.delButton.clicked.connect(self.DataDelete)
        self.cancelButton.clicked.connect(self.Dialog.close)

        self.DBList = [file.replace(".html",'') for file in os.listdir("DBResult/")]
        self.DBList.sort()
        for dbfile in self.DBList:
            self.listWidget.addItem(dbfile)

    def DataSee(self):
        dbfilename = self.listWidget.currentItem().text()+".html"
        protocol = "file://"
        dbfilepath = os.getcwd()+"/DBResult/"
        self.url = protocol + dbfilepath + dbfilename
        self.Dialog.close()

    def DataDelete(self):
        dbfilename = self.listWidget.currentItem().text()+".html"
        os.remove("DBResult/"+dbfilename)
        self.listWidget.takeItem(self.listWidget.currentRow())

이전 포스팅들과 마찬가지로 하나의 클래스로 구현되어 있습니다.

Ui_DBwindow를 상속받아 UI를 구현합니다.

 

    def __init__(self, w3):
        # URL(데이터가 저장된 경로)을 저장할 변수
        self.url = ""

        Ui_DBwindow.__init__(self)
        self.Dialog = w3
        self.setupUi(self.Dialog)

        # 각 버튼을 함수와 연결          
        self.seeButton.clicked.connect(self.DataSee)
        self.delButton.clicked.connect(self.DataDelete)
        self.cancelButton.clicked.connect(self.Dialog.close)

        # 분석결과가 저장된 파일리스트를 출력
        self.DBList = [file.replace(".html",'') for file in os.listdir("DBResult/")]
        self.DBList.sort()
        for dbfile in self.DBList:
            self.listWidget.addItem(dbfile)

__init__ 함수입니다.

Mainwindow에 출력할 파일경로를 저장할 변수를 선언해주고

각 버튼과 함수를 clicked.connect()로 연결해줍니다.

DBwindow Widget을 닫을 때에는 별도의 처리가 필요 없으므로 바로 Exit 버튼은 바로 self.Dialog.close와 연결하여 창 종료 기능을 수행하도록 만들었습니다.

다음으로 분석결과가 저장된 DBResult 폴더를 탐색하여 저장된 파일들의 리스트를 출력합니다.

 

    def DataSee(self):
        dbfilename = self.listWidget.currentItem().text()+".html"
        protocol = "file://"
        dbfilepath = os.getcwd()+"/DBResult/"
        self.url = protocol + dbfilepath + dbfilename
        self.Dialog.close()

See Datamap 버튼을 클릭하면 수행되는 함수입니다.

파일명과 경로를 합쳐 선택한 파일이 있는 경로를 만들어줍니다.

이후엔 창을 닫고 Mainwindow로 이동하여 Mainwindow에 출력하는 기능이 수행됩니다.

 

    def DataDelete(self):
        dbfilename = self.listWidget.currentItem().text()+".html"
        os.remove("DBResult/"+dbfilename)
        self.listWidget.takeItem(self.listWidget.currentRow())

Delete File 버튼을 클릭하면 수행되는 함수입니다.

직접 코드가 저장된 폴더에 들어가지 않고도 결과 파일을 관리할 수 있게 하기 위하여 작성하였습니다.

클릭하면 파일을 저장한 경로를 탐색하고 파일을 삭제합니다.

 

 

데이터를 출력하는 기능은 Mainwindow에서 구현되어 있기 때문에

DBwindow는 파일 리스트를 관리하는 기능을 중심으로 간단하게 구성되었습니다.

 

See Datamap 기능은 이상입니다.