[ Golang을 배워보자! ] go를 이용해 계산기 만들기 - 2 _UI 제작

in #kr7 years ago

안녕하세요.

해당 라이브러리에서는 기본적으로 html,css,js 를 통해 ui를 구성하게됩니다.

어떻게 그게 가능한지 간단하게 설명을 하자면...

그림판으로 그려서 굉장히 허접하지만...
golang 으로 만든 프로그램과 javaScript로 짜여진 프로그램이 통신을 하면서 동작하게 되는 원리 입니다.

무슨 소리인지 모르시겠다면...
http://blog.dramancompany.com/2015/12/electron%EC%9C%BC%EB%A1%9C-%EC%9B%B9-%EC%95%B1-%EB%A7%8C%EB%93%A4%EB%93%AF-%EB%8D%B0%EC%8A%A4%ED%81%AC%ED%86%B1-%EC%95%B1-%EB%A7%8C%EB%93%A4%EA%B8%B0/
위 블로그를 참고해 보시는것도 좋을 것 같네요.
해당 블로그는 golang 대신 node.js 기반으로 돌아가지만, go-astilectron 은 electron를 go를 이용해 사용 할 수 있도록 개발해둔 것이기 때문에 내부적인 원리는 같다고 보시면 됩니다.

자 우선 html을 수정해 보도록 하겠습니다.
저는 웹개발이 주력이 아니기때문에... html을 다루는 솜씨가 영 시원치않아서 bootstrap를 사용하겠습니다.
https://getbootstrap.com/ <- 이곳에서 bootstrap에대한 자세한 정보를 얻으실 수 있습니다.

우선 필요없는 코드를 전부 제거하고 bootstrap을 붙이도록 하겠습니다.

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/css/bootstrap.min.css" integrity="sha384-Zug+QiDoJOrZ5t4lssLdxGhVrurbmBWopoEl+M6BdEfwnCJZtKxi1KgxUyJq13dy" crossorigin="anonymous">
    <link rel="stylesheet" href="static/css/base.css"/>
    <link rel="stylesheet" href="static/lib/astiloader/astiloader.css">
    <link rel="stylesheet" href="static/lib/astimodaler/astimodaler.css">
    <link rel="stylesheet" href="static/lib/astinotifier/astinotifier.css">
    <link rel="stylesheet" href="static/lib/font-awesome-4.7.0/css/font-awesome.min.css">
</head>
<body>
    
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/js/bootstrap.min.js" integrity="sha384-a5N7Y/aK3qNeh15eJKGWxsqtnX/wWdSZSKp+81YjTmS15nvnvxKHuzaWwXHDli+4" crossorigin="anonymous"></script>
    <script src="static/js/index.js"></script>
    <script src="static/lib/astiloader/astiloader.js"></script>
    <script src="static/lib/astimodaler/astimodaler.js"></script>
    <script src="static/lib/astinotifier/astinotifier.js"></script>
    <script src="static/lib/chart/chart.min.js"></script>
    <script type="text/javascript">
        index.init();
    </script>
</body>
</html>

자 깔끔하게 날려버리고 bootstrap을 사용하기 위한 코드를 추가하였습니다.

이제 ui를 만들기 위해 div로 도배를 해보겠습니다.

<body>
    <div class="number-area">
        <textarea id="edit"></textarea>
    </div>
    <div class="row btn-area">
        <div class="col-12">
            <div class="row">
                <div class="col-3 btn-padding">
                    <button type="button" class="btn btn-primary">C</button>
                </div>
                <div class="col-3 btn-padding">
                    <button type="button" class="btn btn-primary">√</button>
                </div>
                <div class="col-3 btn-padding">
                    <button type="button" class="btn btn-primary">x²</button>
                </div>
                <div class="col-3 btn-padding">
                    <button type="button" class="btn btn-primary">÷</button>                        
                </div>
            </div>
            <div class="row">
                <div class="col-3 btn-padding">
                    <button type="button" class="btn btn-secondary">1</button>
                </div>
                <div class="col-3 btn-padding">
                    <button type="button" class="btn btn-secondary">2</button>
                </div>
                <div class="col-3 btn-padding">
                    <button type="button" class="btn btn-secondary">3</button>
                </div>
                <div class="col-3 btn-padding">
                    <button type="button" class="btn btn-primary">×</button>                        
                </div>
            </div>
            <div class="row">
                <div class="col-3 btn-padding">
                    <button type="button" class="btn btn-secondary">4</button>
                </div>
                <div class="col-3 btn-padding">
                    <button type="button" class="btn btn-secondary">5</button>
                </div>
                <div class="col-3 btn-padding">
                    <button type="button" class="btn btn-secondary">6</button>
                </div>
                <div class="col-3 btn-padding">
                    <button type="button" class="btn btn-primary">+</button>                        
                </div>
            </div>
            <div class="row">
                <div class="col-3 btn-padding">
                    <button type="button" class="btn btn-secondary">7</button>
                </div>
                <div class="col-3 btn-padding">
                    <button type="button" class="btn btn-secondary">8</button>
                </div>
                <div class="col-3 btn-padding">
                    <button type="button" class="btn btn-secondary">9</button>
                </div>
                <div class="col-3 btn-padding">
                    <button type="button" class="btn btn-primary">-</button>                        
                </div>
            </div>
            <div class="row">
                <div class="col-6 btn-padding">
                    <button type="button" class="btn btn-secondary">0</button>
                </div>
                <div class="col-3 btn-padding">
                    <button type="button" class="btn btn-secondary">.</button>
                </div>
                <div class="col-3 btn-padding">
                    <button type="button" class="btn btn-primary" onclick="index.calc()">=</button>                        
                </div>
            </div>
        </div>
    </div>


와우... 이대로 그냥 빌드를 해보았더니 굉장히 못생겼군요 ;;;

언능 css파일을 수정해야 겠습니다.

base.css

* {
    box-sizing:  border-box;
}

html, body {
    background-color: #333;    
    color: #fff;
    height: 100%;
    margin: 0;
    width: 100%;
    padding-right: 10px;
    padding-left: 10px;
    min-width: 300px;
}

.number-area {
    color: #fff;
    float: top;
    height: 50px;
    overflow:unset;
    padding-top: 20px;
    width: 100%;
}

#edit {
    background-color: #777;
    resize: none;
    height: 100%;
    width: 100%;
}

.btn {
    width: 100%;
}

.btn-area {
    padding: 10px;
}

.btn-padding {    
    padding-left: 5px;
    padding-right: 5px;
    padding-top: 5px;
    padding-bottom: 5px;
}


오... 이제 좀 봐줄만 하군요!
저에게 더 이쁘게 만드는건 불가능 하니... 디자인은 이정도로 만족하도록 하겠습니다.

그런데? 실행후 5초가 지나면 팝업이 노출이되고, File > about 을 눌렀을때도 팝업이 뜨는데요.

이게 무슨 일인지요...

이를 해결하기위해서는static/lib/astimodaler/astimodaler.css 와 static/lib/astinotifier/astinotifier.css 를 수정해야 하는데요. 저는 lib 파일을 건드리는건 선호하지 않기때문에...


base.css를 맨 아래로 내려서 해당 파일에서 덮어씌워 버리도록 하겠습니다.

base.css

...
.astimodaler {
    z-index: 1;
}

.astinotifier {
    z-index: 1;
}

위 코드를 base.css 맨 아래에 추가해 주세요.


팝업이 정상적으로 노출이 되네요 ㅎㅎ

다음 글에서는 go 파일과 js 파일간에 메세지를 주고받는걸 통해 계산이 가능하도록 해보겠습니다.