본문 바로가기
무모한 도전-주식 인공지능 만들기

RLTrader의 유저 인터페이스를 만드는 작업-3-

by 인터넷떠돌이 2018. 12. 12.
반응형

안녕하세요?


이번 포스팅에서는 어떻게 해서 데이터 베이스의 파일에서 원하는 테이블이 있는 경우에 대해서 상호작용을 할 것인가에 대해서 한번 포스팅을 해야 겠는데, 내용이 너무 길어져서 하는 수 없이 중간에 잘라야 했습니다. 아무튼 중간에 자른 것은 자른 것이고, 포스팅은 계속해서 이어 가도록 해 보겠습니다.



우선은 pushButton_5라고해서, 강화학습을 시작하는 빨간색 버튼이 있습니다. 이 버튼을 이용하도록 해야 겠는데, 일단 __init__(self):에서 먼저 버튼이 눌러지는 것을 감지하면 Try_machine_Learning()이라는 메소드가 작동되도록 만들어 줍니다.



다음은 이 버튼이 눌러졌을 때, 해당하는 항목들이 없으면 에러 메세지가 뜨도록 만들어야 합니다. 당연히 lineEdit이 비어 이있으면 false가 되므로 이 경우에는 메세지 박스가 뜨도록 만들어 줘야 합니다.



그리고 나서 최조로 공백이라는 값으로 선언이 되지 않으면, 에러가 발생할 수 있으므로, 미리미리 lineEdit의 텍스트는 시작시에 공백이라고 선언을 해 주도록 합니다. 물론, 이게 필요가 없을 수도 있지만, 그냥 습관적으로 하는 것이라고 보시면 됩니다.



그런데 제대로 뭐가 안된다 싶었더니, 위 스크린샷처럼 lineEdit.text()라고 붙여야 제대로 true나 false를 구분할 수 있어집니다. 이건 앞으로 상당히 중요하다는 생각이 드므로, if문을 사용해서 lineEdit에 텍스트가 있는지 없는지를 알아보기 위해서는 lineEdit.text()라는 형식이 중요하다는 것 입니다.




프로그램을 실행시킨 다음에, 위 스크린샷처럼 database를 지정하십시요. 라는 메세지가 뜨는 것을 확인할 수 있었습니다. 이렇게 한은 것으로 일단은 완료가 된 듯 합니다.



다음으로는 lineEdit_2의 텍스트가 바뀌면, Selection_of_table이라는 메소드가 실행이 되도록 프로그램을 짜 주도록 합니다. 여기서의 의미는 간단하게 종목코드를 입력하면, 데이터 베이스 파일에서 제대로 종목의 코드에 관련이 되어 있는 테이블이 있는지 여부를 알아 보도록 합니다.



먼저 해당하는 메소드에서는 위 스크린샷과 같이, 데이터 베이스를 지정하지 않았다 = lineEdit.text()가 false이면 아래의 else다음에 나오는 조건문에서 메세지 박스를 띄우도록 만들어 줍니다.



그리고 실재로 실행을 시켜서, 한반 데이터 베이스 파일을 지정하지 않고서 실행을 시키자, 위 스크린샷과 같은 메세지 박스가 나오는 것을 볼 수 있습니다.




다음으로는 sqlite3.connect(데이터 베이스 경로).cursor().execute('select name from sqlite_master where type = "table' and name = "테이블의 이름"')이라는 긴 형식의 문장을 통해서, 먼저 테이블 내에서 "테이블의 이름"에 맞는 테이블이 있는지를 검색해 보도록 하고, 그 결과를 가지고 옵니다. 그래서 if문을 사용해서 입력한 값과, execute()를 통해서 나온 값이 일치하면 조건을 만족한다고 띄우도록 해 보았습니다.



그리고 여기서 중요한 것이, 타자를 한번 칠때마다 changeText로 처리를 해 놓으면, 할때마다 테이블이 없다는 식으로 경고 메세지가 뜨는 것을 볼 수 있었습니다. 그래서 returnPressed라고 바꾸어 놓아서, 엔터키를 칠 때마다로 바꾸어 주도록 만듭니다.



일단 위 스크린샷처럼 제대로 된 종목코를 입력하고, 그 종목의 코드와 같은 테이블이 있는 데이터 베이스 파일을 지정해 보도록 합니다. 이 경우에는 잘 되었습니다만, 문제는 잘못된 종목의 코드를 입력하면 부드럽게 넘어가지 못하고, 에러가 나면서 종료가 되었습니다.



그래서 한번 무엇이 잘못 되었는지 알아 보기 위해서, 위 스크린샷처럼 print()함수를 통해서 어떤일이 벌어지고 있는지를 살펴 보고자 합니다.



그러자 나오는 것이, 경로는 경로이고, 이렇게 값은 값으로 다르게 나오는 것을 볼 수 있었습니다. 일단 경로로 나온다는 것이 문제는 문제이기에, 한번 lineEdit_2의 텍스트 값을 가지고 오는 것이 더 나아 보인다는 생각이 듭니다. 그리고 나서 이 에러를 해결하기 위해서 계속 시도를 해 보겠습니다.

반응형