[ 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 파일간에 메세지를 주고받는걸 통해 계산이 가능하도록 해보겠습니다.

Coin Marketplace

STEEM 0.20
TRX 0.14
JST 0.030
BTC 67408.93
ETH 3491.49
USDT 1.00
SBD 2.70