๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

์ด๋ฒคํŠธ ๋‚ด์šฉ ์ž ์‹œ ์ €์žฅ

by hyeonha 2022. 11. 24.

๋ชฉ์ฐจ

    import sys
    import numpy as np
    from PyQt5.QtWidgets import *


    class Main(QDialog):
        def __init__(self):
            super().__init__()
            self.init_ui()

        def init_ui(self):
            main_layout =QVBoxLayout()


            ## #๋ ˆ์ด์•„์›ƒ ํ‹€ ์žก๊ธฐ ###

            layout_operation_solution = QFormLayout()
            layout_funct1 = QGridLayout()
            layout_number = QGridLayout()
            layout_funct2 =QGridLayout()

            ### layout_number ๊ณผ layout_funct2๋ฅผ ๋‹ด์„ layout_part ###
            layout_part = QHBoxLayout()


            ### ์ˆ˜์‹ ์ž…๋ ฅ & ๊ฒฐ๊ณผ ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” operation_solution ์ฐฝ ๊ตฌํ˜„ ###
            self.operation_solution = QLineEdit()
            layout_operation_solution.addRow("", self.operation_solution)
            self.operation_solution.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding)


            ### ๊ธฐ๋Šฅ funct1 ๋ฒ„ํŠผ ๊ตฌํ˜„ ###
            ###๋‚˜๋จธ์ง€
            button_remainder = QPushButton("%")
            ##CE
            button_clear_entry = QPushButton("CE")
            ## C
            button_clear = QPushButton("C")
            button_backspace = QPushButton("์ง€์šฐ๊ธฐ")
            ### 1/x
            button_reciprocal =QPushButton("1/x")
            ### ์ œ๊ณฑ
            button_square = QPushButton("์ œ๊ณฑ")
            ### ์ œ๊ณฑ๊ทผ
            button_square_root=QPushButton("์ œ๊ณฑ๊ทผ")
            ### ๋‚˜๋ˆ„๊ธฐ
            button_division = QPushButton("÷")

            #์ด๋ฒคํŠธ ์ถ”๊ฐ€ํ•˜๊ธฐ
            button_remainder.clicked.connect(self.button_remainder_clicked)
            button_clear_entry.clicked.connect(self.button_clear_entry_clicked)
            button_clear.clicked.connect(self.button_clear_clicked)
            button_backspace.clicked.connect(self.button_backspace_clicked)
            button_reciprocal.clicked.connect(self.button_reciprocal_clicked)
            button_square.clicked.connect(self.button_square_clicked)
            button_square_root.clicked.connect(self.button_square_root_clicked)
            button_division.clicked.connect(self.button_division_clicked)


            layout_funct1.addWidget(button_remainder,0 , 0)
            layout_funct1.addWidget(button_clear_entry,0 , 1)
            layout_funct1.addWidget(button_clear,0 ,2)
            layout_funct1.addWidget(button_backspace,0 ,3)
            layout_funct1.addWidget(button_reciprocal,1 , 0)
            layout_funct1.addWidget(button_square,1,1)
            layout_funct1.addWidget(button_square_root,1 ,2)
            layout_funct1.addWidget(button_division,1 , 3)

            ### layout_funct2 ๊ตฌ์„ฑํ•˜๊ธฐ ###
            button_product = QPushButton("x")
            button_minus =QPushButton("-")
            button_plus = QPushButton("+")
            button_result = QPushButton("=")
            button_plus_minus = QPushButton("+/-")
            button_add_dot = QPushButton(".")

           

            ### ์‚ฌ์น™์—ฐ์‚ฐ ์ด๋ฒคํŠธ ์ถ”๊ฐ€ํ•˜๊ธฐ ###
            button_plus.clicked.connect(self.button_plus_clicked)
            layout_funct2.addWidget(button_product,0,3)
            layout_funct2.addWidget(button_minus,1,3)
            layout_funct2.addWidget(button_plus,2,3)
            layout_funct2.addWidget(button_result,3,3)
            layout_funct2.addWidget(button_plus_minus,3,0)
            layout_funct2.addWidget(button_add_dot,3,2)

            np = {}
            for number in range(0, 10):
                np[number] = QPushButton(str(number))
                np[number].clicked.connect(lambda state, num = number:
                                                           self.number_button_clicked(num))

                if number > 0:
                    x, y = divmod(number - 1, 3)
                    # 3์œผ๋กœ ๋‚˜๋ˆด์„ ๋•Œ ๋ชซ๊ณผ ๋‚˜๋จธ์ง€์— ๋”ฐ๋ผ ๋ฐฐ์น˜๋ฅผ ํ•˜๋ฉด ๋œ๋‹ค.
                    if x==0:
                        layout_number.addWidget(np[number], 2, y)
                    elif x==2:
                        layout_number.addWidget(np[number], 0, y)
                    else:
                        layout_number.addWidget(np[number], x, y)

                elif number == 0:
                    layout_number.addWidget(np[number], 3, 1)

            layout_part.addLayout(layout_number)
            layout_number.addLayout(layout_funct2)

            ###main_layout์— ์ถ”๊ฐ€ ###
            main_layout.addLayout(layout_operation_solution)
            main_layout.addLayout(layout_funct1)
            main_layout.addLayout(layout_part)


            self.setLayout(main_layout)
            self.resize(400, 400)
            self.show()

        def button_remainder_clicked(self):
            operation_solution = self.operation_solution.text()
            operation_solution += "%"
            self.operation_solution.setText(operation_solution)

        def button_clear_entry_clicked(self):
            operation_solution = self.operation_solution
            operation_solution.setText("0")

        def button_clear_clicked(self):
            operation_solution = self.operation_solution
            operation_solution.setText("0")

        def button_backspace_clicked(self):
            print(2)

        def button_reciprocal_clicked(self):
            operation_solution = self.operation_solution
            operation_solution.setText(np.reciprocal(operation_solution))

        def button_square_clicked(self):
            print(4)

        def button_square_root_clicked(self):
            print(5)

        def button_division_clicked(self):
            operation_solution = self.operation_solution.text()
            operation_solution += "÷"
            self.operation_solution.setText(operation_solution)


        def button_plus_clicked(self):
            operation_solution = self.operation_solution.text()
            operation_solution += "+"
            self.operation_solution.setText(operation_solution)

        def button_minus_clicked(self):
            operation_solution = self.operation_solution.text()
            operation_solution += "-"
            self.operation_solution.setText(operation_solution)

        def button_production_clicked(self):
            operation_solution = self.operation_solution.text()
            operation_solution += "x"
            self.operation_solution.setText(operation_solution)

        def number_button_clicked(self,num):
            operation_solution = self.operation_solution.text()
            operation_solution += str(num)
            self.operation_solution.setText(operation_solution)

    if __name__ =='__main__':
        app = QApplication(sys.argv)
        main = Main()
        sys.exit(app.exec_())
    728x90