반응형

 

cx_Oracle의 설치에 이어 DB 연동, 그리고 tkinter를 이용한 GUI 프로그래밍을 해보겠습니다. 화면 구성은 정말 간단히...레이블에 DB 주소를 입력하고 엔터를 누르면 연결해서 결과를 출력하는 구성입니다.

import cx_Oracle 
import os 
import tkinter 

#GUI 부분 

window=tkinter.Tk() 

#기본 설정 
window.title("GUI Sample") 
window.geometry("640x640+100+100")  #너비X높이+X좌표+Y좌표 
window.resizable(True, True)        #사이즈 변경 가능 

#레이블 
label_ip=tkinter.Label(window, text="예: myid.myweb.com:1526/orcl", width=50, height=2, fg="red", relief="solid") 
label_id=tkinter.Label(window, text="예: erpif", width=20, height=2, fg="red", relief="solid") 
label_pw=tkinter.Label(window, text="예: erp0901", width=20, height=2, fg="red", relief="solid") 



#엔트리 함수 
def set_ip(event): 
    ip_adress=str(eval(entry.get())) 
     
#엔트리 입력창 
entry=tkinter.Entry(window) 
entry.bind("", set_ip) 



#한글지원방법 
os.putenv('NLS_LANG', '.UTF8') 

#연결에 필요한 기본 정보(유저, 비밀번호, 데이터베이스 서버 주소) 
connection = cx_Oracle.connect('login_id','login_pw', ip_adress) 

cursor = connection.cursor() 

cursor.execute(""" 
    select * 
    from TEMP 
    where KORN_NAME='홍길동' 
    """) 

for list in cursor: 
    print(list) 


label_ip.pack() 
label_id.pack() 
label_pw.pack() 

entry.pack(side="top") 

window.mainloop()

 

 

좀 멋도 없었는데, 블러까지 적용하니 참.....한심해보이지만,

그래도 기본적인 내용은 들어있다고 자축하며

이번 예제를 마무리 해봅니다.^^;;;

 

GUI화면에 결과 출력하는 것은 다음기회에...

 

 

반응형
반응형

Python로 Oracle Database에 연결하기 위해서는 cx_oracle 모듈을 설치해야 합니다.

 

설치 방법은 어렵지 않은데 Pycharm과 일반 커맨드창 파이썬에서 실행하는 방법을 나눠 설명하겠습니다.

 

1. 우선 주로 쓰는 Pycharm에서는 File - Settings - Project - Project Interpreter 로 진입합니다. 그리고 cx_Oracle 모듈을 찾아서 설치해 줍니다.

 

cx_Oracle 모듈을 찾아 설치한다.

 

 

 

모듈 설치하고 난 모습

 

2. Command창에 설치해서 사용하는 경우라면,

sudo pip install cx_oracle

로 설치할 수 있습니니다.

 

3. Oracle Client 설치

cx_Oracle을 사용하려면 Oracle Client를 설치해주어야 합니다. Oracle이 설치되어있어도 Library 때문에 필요한 것으로 보입니다. 설치 경로는 여기를 참조하세요.

설치가 다 끝나면 코드 내부에서 해당 라이브러리를 사용하도록 경로를 설정해줍니다. (Path에 추가해주면 된다고 하는데, 잘 안되서 직접 경로를 넣어줬습니다. 이방법이 제일 확실히 되는 것 같습니다.)

cx_Oracle.init_oracle_client(lib_dir=r"D:\8_Programs\Oracle\instantclient_19_9")

 

4. DBconn.py (DB Connection Sample)

import cx_Oracle
import os


#한글지원방법
os.putenv('NLS_LANG', '.UTF8')

# 함수 정의
def connect():
	#라이브러리 연결
    cx_Oracle.init_oracle_client(lib_dir=r"D:\8_Programs\Oracle\instantclient_19_9")
    
    con_ip='localhost:1526/testdb'
    con_id='user'
    con_pw='password'
 
    #연결에 필요한 기본 정보(유저, 비밀번호, 데이터베이스 서버 주소)
    connection = cx_Oracle.connect(con_id,con_pw, con_ip)
    cursor = connection.cursor()
    cursor.execute("""
        select *
        from member
        where name='홍길동'
        """)

    for list in cursor:
        print(list)

    cursor.close()
    connection.close()
    
# 함수 실행    
connect()

 
반응형
반응형

 

 

회사에서는 예전에 만들어둔 Visual Basic 6.0을 어쩌지 못해 계속 사용하고 있습니다. 저는 그 유지보수 담당입니다. 다른 언어로 갈아 엎고는 싶지만,,,  온지 얼마 안돼서..아니, 실력이 아직 한참 모자라서 그냥 유지보수 중입니다.

그러나 마음만은 항상 다른 언어로 포팅하려고 준비하고 있습니다. 배포가 편리한 Java를 유력 후보로 생각하고 있는데요..(C# 안사줌..ㅠㅠ)

그 전에 간단한 프로그램 프로토타입 설계를 위해 tkinter를 손대보기로 했습니다.

 

결론은, 필요한 기능 그때그때 불러다 쓸 기본 위젯 종합 선물세트를 만들었습니다.  필요할 때 골라 쓰려구요. 실행하면 이런 gui프로그램이 나오게 될 것입니다.

 

그리고, 소스는 https://076923.github.io/ 사이트를 참조했음을 알려드리며, 개발자분께 감사드립니다. 자세한 모듈 속성에 대한 설명도 해당 사이트에서 확인할 수 있습니다.


import tkinter

window=tkinter.Tk()

#기본 설정
window.title("GUI Sample")
window.geometry("640x640+100+100")  #너비X높이+X좌표+Y좌표
window.resizable(True, True)        #사이즈 변경 가능

#레이블
label_1=tkinter.Label(window, text="위젯 테스트용입니다.", width=20, height=5, fg="red", relief="solid")
label_2=tkinter.Label(window, text="", width=20, height=3, fg="red", relief="solid")

label_1.pack()
label_2.pack()

#버튼
button = tkinter.Button(window, text="hi", overrelief="solid", width=20)
button.pack()


# 엔트리 함수
def calc(event):
    label.config(text="결과=" + str(eval(entry.get())))

#엔트리 입력창
entry=tkinter.Entry(window)
entry.bind("<Return>", calc)
entry.pack()

#리스트박스
listbox=tkinter.Listbox(window, selectmode='extended', height=0)
listbox.insert(0, "no1")
listbox.insert(1, "no2")
listbox.insert(2, "no3")
listbox.insert(3, "no4")
listbox.insert(4, "no5")
listbox.pack()

#체크박스 함수
def flash():
    button.flash()

#체크박스
CheckVariety_1=tkinter.IntVar()
CheckVariety_2=tkinter.IntVar()

checkbutton1=tkinter.Checkbutton(window,text="O", variable=CheckVariety_1, activebackground="blue")
checkbutton2=tkinter.Checkbutton(window, text="Y", variable=CheckVariety_2)
checkbutton3=tkinter.Checkbutton(window, text="X", variable=CheckVariety_2, command=flash)

checkbutton1.pack()
checkbutton2.pack()
checkbutton3.pack()

#라디오버튼
RadioVariety_1=tkinter.IntVar()

#value값이 같을 경우 함께 선택됨
radio1=tkinter.Radiobutton(window, text="1번", value=3, variable=RadioVariety_1)
radio1.pack()
radio2=tkinter.Radiobutton(window, text="2번", value=3, variable=RadioVariety_1)
radio2.pack()
radio3=tkinter.Radiobutton(window, text="3번", value=9, variable=RadioVariety_1)
radio3.pack()

#메뉴
def close():
    window.quit()
    window.destroy()

menubar=tkinter.Menu(window)

menu_1=tkinter.Menu(menubar, tearoff=0)
menu_1.add_command(label="Sub Menu1-1")
menu_1.add_command(label="Sub Menu1-2")
menu_1.add_separator()
menu_1.add_command(label="종료", command=close)
menubar.add_cascade(label="Menu1", menu=menu_1)

menu_2=tkinter.Menu(menubar, tearoff=0, selectcolor="red")
menu_2.add_radiobutton(label="Sub Menu2-1", state="disable")
menu_2.add_radiobutton(label="Sub Menu2-2")
menu_2.add_radiobutton(label="Sub Menu2-3")
menubar.add_cascade(label="Menu2", menu=menu_2)

menu_3=tkinter.Menu(menubar, tearoff=0)
menu_3.add_checkbutton(label="Sub Menu3-1")
menu_3.add_checkbutton(label="Sub Menu3-2")
menu_3.add_checkbutton(label="Sub Menu3-3")
menubar.add_cascade(label="Menu3", menu=menu_3)


#메뉴 버튼
menubutton=tkinter.Menubutton(window,text="Menu Button", relief="raised", direction="right")
menubutton.pack()

menu=tkinter.Menu(menubutton, tearoff=0)
menu.add_command(label="Sub-1")
menu.add_separator()
menu.add_command(label="Sub-2")
menu.add_command(label="Sub-3")

menubutton["menu"]=menu
window.config(menu=menubar)

#배치(place(), pack(), grid())
b1=tkinter.Button(window, text="top")
b1.pack(side="top")
b2=tkinter.Button(window, text="bottom")
b2.pack(side="bottom")
b3=tkinter.Button(window, text="left")
b3.pack(side="left")
b4=tkinter.Button(window, text="right")
b4.pack(side="right")

bb1=tkinter.Button(window, text="(50, 50)")
bb2=tkinter.Button(window, text="(50, 100)")
bb3=tkinter.Button(window, text="(100, 150)")
bb4=tkinter.Button(window, text="(0, 200)")
bb5=tkinter.Button(window, text="(0, 300)")
bb6=tkinter.Button(window, text="(0, 300)")

bb1.place(x=50, y=50)
bb2.place(x=50, y=100, width=50, height=50)
bb3.place(x=100, y=150, bordermode="inside")
bb4.place(x=0, y=200, relwidth=0.5)
bb5.place(x=0, y=300, relx=0.5)
bb6.place(x=0, y=300, relx=0.5, anchor="s")

"""     grid() 는 pack()과 함께 쓰일 수 없음

bbb1=tkinter.Button(window, text="(0,0)")
bbb1.grid(row=0, column=0)
bbb2=tkinter.Button(window, text="(1,1)", width=20)
bbb2.grid(row=1, column=1, columnspan=3)
bbb3=tkinter.Button(window, text="(1,2)")
bbb3.grid(row=1, column=2)
bbb4=tkinter.Button(window, text="(2,3)")
bbb4.grid(row=2, column=3)
"""

window.mainloop()

 

필요하신 분, 가져다가 적극 활용하시기 바랍니다.

감사합니다.^^

 

 

 

 

 

 

 

 

 

 

반응형
반응형

만자로 리눅스에서 한글 ibus 설정하는 방법을 기록해놓습니다.


1. 설치하는 방법
ibus-hangul만 설치하면 다른 필요한 패키지는 자동으로 설치됩니다.

sudo pacman -S ibus-hangul


2. ibus 설정 방법

먼저 applications 에서 ibus-preferences 에 들어가야 하는데....application list를 살펴봐도 보이지가 않네요. 패키지 관리자에서 ibus를 검색해서 실행하던지...터미널에서 ibus-setup 명령으로 들어갑니다.



입력방식(input-method) 탭에서 '추가' 클릭 후 '... -> 한국어'을 선택하고 삼색의 태극무늬가 있는 hangul을 선택합니다.(ibus-hangle 설치하면 추가됨. 잘 안보이면 리부팅.)

추가한 후 기본설정을 누르면 한/영 전환 키 설정하는 부분이 나오는데..

추가->한영키를 눌러 키를 인식시켜주면 추가됩니다. 인식은 되었는데도 막상 해당 키로 변한이 안되면, Hangul이라고 쳐서 등록해주면 됩니다. (제 개인 노트북 특성상 한영키를 Alt_R로 인식하네요..^^;;)


3. 시스템 설정에서 설정하기

Gnome의 경우 'Region & Language' 에 들어가서 '입력 소스' 부분의 + 키를 눌러 추가를 해 줍니다.
경로는 others (또는 ...) -> 한국어'-> 한국어(hangul)을 추가해줍니다.

이제 한극 ibus가 상단에 추가되어 (한/A)를 변환할 수 있게 됩니다.



~~끝~~

반응형
반응형

 

인텔리제이에 JavaFX 프로젝트 만들기 힘드네요.

그래서 오늘 구글 검색해가며 수행한 내용을 좀 기록해 놓으려고 합니다. 한글 검색으로는 대부분 JavaFX설치 매뉴얼이 이클립스 기준이라.... 인텔리제이 정보 찾느라고 조금 힘들었습니다. 사실 금방 나오지만...영어라...

 

1. 우선 Intellij, JavaSDK는 기본적으로 깔려 있어야 합니다. (예제에서는 JavaSDK 13, JavaFX SDK11을 사용하였습니다.)

 

2. JavaFX SDK를 다운받아서 설치해야합니다. 다운받는 경로는 요기를 참조하세요. 설치..가 아니라 적당한 곳에 압축을 풀어놓으면 됩니다. 참고로 Program Files와 같이 빈칸이 들어간 곳에 하면 나중에 Module 추가부분에서 에러가 발생하니, 주의하시기 바랍니다. "C:\javafx-sdk-11.0.2" 의 형식이 되겠죠?

 

3. JavaFX 프로젝트를 생성합니다.

 

 

 

4. 적당한 이름으로 생성을 합니다. 그러나 JavaFX메뉴로 생성을 한 프로젝트 임에도 아직 JavaFX클래스들을 인식하지 못합니다.

 

 

 

5. 프로젝트 SDK 설정

"File -> Project Structure -> Project" 메뉴를 찾아가서 프로젝트 SDK를 찾아주고, Language Level도 아래와 같이 설정합니다. 무슨 의미인지는 모르겠으나 No new Language features라고 되어있으면 정상이라고 합니다.

 

 

 

6. 라이브러리 설정

"File -> Project Structure -> Libraries"메뉴로 가서 JavaFX 11라이브러리를 추가해 줍니다. 아래 화면에서와 같이 +버튼을 누르고 Java를 선택합니다.

 

 

설치한 라이브러리의 경로를 찾아주고..

 

 

적용할 모듈(생성한 프로젝트)을 선택합니다.

 

 

정상 적용되면 아래와 같이 나옵니다.

 

 

라이브러리가 적용되면 JavaFX 클래스를 인식한다는데, 아직 인식 못할 수도 있습니다..ㅠㅠ

 

7. 모듈 추가

컴파일은 되는데 아래와 같은 에러가 뜬다면 모듈 추가가 필요합니다. (저는 당연히 해야하는 걸로 알겠습니다.)

Error: JavaFX runtime components are missing, and are required to run this application

"Run -> Edit Configurations" 메뉴를 클릭하고

 

 

Run/Debug Configurations 다이얼로그가 나오면 VM options에 아래 내용을 입력합니다.

--module-path %PATH_TO_FX% --add-modules=javafx.controls,javafx.fxml

 

 

%PATH_TO_FX%는 가가의 JavaFX 라이브러리의 경로입니다. 제 경우는

"--module-path C:\javafx-sdk-11.0.2\lib --add-modules=javafx.controls,javafx.fxml"

라고 입력했습니다. 인텔리제이로 아까 생성한 프로젝트는 FXML을 사용하므로, javafx.fxml과 javafx.controls가 필요합니다. 다른 것도 필요하면 여기에 추가해줘야 합니다.

 

 

여기까지 하고 Run을 실행하니 정말 거짓말처럼 작동이 되네요. 이게 되다니 신기하네요.

 

반응형
반응형

 

오라클 데이터베이스를 다루는 툴로 SQL Developer를 많이 사용합니다. 그런데 매번 메뉴가 바뀔 때마다 다운로드 경로 찾기가 쉽지가 않네요. 2020년 2월 기준으로 SQL Developer 다운 사이트는 요기입니다.

 

자신의 pc에 JDK가 깔려 있으면 아래쪽 파일을.. 안깔려 있으면 위쪽 파일(with JDK 8 included)을 받아서 설치해  줍니다.

참, 얼마 전부터는 다운로드 하는 데에도 로그인을 해야합니다. 즉, 가입이 되어있어야 다운로드가 가능합니다.

 

SQL Developer는 별도 설치가 필요 없는 프로그램입니다. 다운로드 받아서 zip파일을 풀고 sqldeveloper.exe를 실행하면 곧바로 실행됩니다.

 

중간에 이런 창이 뜨는데, 할수 있는게 아니오 밖에 없습니다. 그냥 그러겠다고 하세요...

 

 

짜잔~! 우선 실행이 되었네요.

 

자, 이제 접속해야합니다. 접속 정보는 다들 아시죠? 네... 요렇게요^^

약간의 설명을 덧붙이자면..

 

  • 접속 이름 : 편한 이름 적으시면 됩니다. 큰 의미 없음.

  • 사용자 이름 : 호스트에 접속할 계정명. 관리자 계정으로 접속하려면 system 또는 sys 입력. 

  • 비밀번호 :  계정명에 대한 비밀번호. 

  • 호스트 이름 : IP 주소 또는 호스트 주소를 입력. 자신의 PC에 오라클을 설치했다면 localhost를 입력.

  • 포트 : 연결할 오라클의 포트번호를 입력. 따로 변경하지 않았다면 1521.

  • SID : 전역 데이터베이스의 이름을 입력. 설치 시 따로 지정하지 않았다면 orcl.

이렇게 입력하고 나면 테스트를 클릭하여 잘 접속이 되나 봅니다.

'상태: 성공' 이라고 뜨면 잘 접속 된거겠죠? 그럼 접속도 클릭해봅시다.

 

짜잔~~~~ DB가 자알 붙었습니다. (중요한 DB정보가 있어서 실제 테이블은 숨기겠습니다...)

이제 SQL들 날리면서 잘 사용하세요~^^

반응형
반응형

사진 보정의 필수 기능인 커브 조정하는 법에 대해 알아보겠습니다.

우선 수정할 사진을 하나 불러옵니다.

색 메뉴의 Curves 서브메뉴를 선택합니다.

 

아래와 같이 샛색상 커브 조절기능이 열립니다.

색상 커브 조절 기능은 다른 프로그램과 동일하게 사용하시면 됩니다.

아래쪽은 어두은 영역을 말하며, 위쪽 영역은 밝은 영역을 말합니다. 따라서 좀 더 밝게 만들려면 커브를 드래그하여 위쪽으로 볼록한 커브를 만들고, 좀 더 어둡게 만들려면 아래로 볼록하게 만들면 됩니다.

 

보통 사진을 편집할 때에는 어두운 부분은 좀 더 밝게, 밝은 영역은 조금 어둡게 해서 명암 대비를 낮춰줍니다. 아래 그림처럼요. (물론, 반대일 경우도 있습니다.)

예시를 위해 커브를 살짝 조절해 보았습니다.

 

오늘도 간단하게 김프로 커브 조정하는 기능 확인 끝~~

반응형
반응형

GIMP 사용법 중 가장 자주 사용하게 되는 기능은 바로 자르기가 아닐까 합니다. 기능은 완전 쉬워요.

 

우선 적당한 이미지를 하나 불러오겠습니다. 그리고 왼쪽 메뉴에서 자르기 툴을 선택한 다음에....

자르고 싶은 영역을 드래그하여 설정해줍니다.

그리고 엔터 누르면...

짜잔~ 참 쉽죠??

제일 첫 강좌....라고 하기도 좀 민망하지만, 자르기 강좌를 마치겠습니다.^^;;

씨 유 어겐~

반응형

+ Recent posts