728x90
반응형

책 제목: 왜 당신은 죽어가는 자신을 방치하고 있는가


저자: 고윤
읽은 날짜: 2025.01.13 

책 표지 이미지


 

책 내용 요약

  • 타인의 시선, 환경의 변화와 적응에는 누구보다 민감하지만 자신에게는 둔감한 당신
  • 꼭 모든 사람에게 인정받아야 할 필요는 없다. 부처나 예수조차 모든 이에게 인정받지 못했다. 타인에게 인정받기를 갈구하지 마라. 그럴 필요 없다. 인정받아야 할 곳은 상대가 아닌 자기 자신이다. - 법상스님
  • 눈을 뜨고 더 넓게 보자. 세심하게 상황을 분석하고 걸러낼 건 걸러내자. 역지사지의 관점과 포용의 자세로 생각하다 보면 한 뼘의 여유가 생기기 마련이다. 과점이 넓어진 상태에서 내리는 선택은 지금보다 지혜로울 수밖에 없다.
    내가 아는 것이 세상의 다가 아님을 기억해라.
  • 과도한 집중 대신 적절한 여유를 즐기며 삶의 질을 높여보자.
    한 뼘의 여유가 당신을 실력자로 만든다.
  • 우리가 무엇인가에 빠져 온전히 몰입할 때, 우리의 뇌는 자신이 정한 확고한 목표 외 다른 상황을 쉽사리 인지하지 못한다는 것이다.
  • A부터 Z까지의 시야를 가니 사람은 틀린 것이 아닌 다름을 인정할 줄 알기에 우리도 단편적인 것만 보고 판단하는 습관을 버리고 넓은 관점을 가져야 한다.
  • 변화가 지속적으로 쌓이면 결국 큰 변화를 가져온다.
  • 부정적인 생각이나 회피 대신, 긍정적이고 대담한 태도로 삶을 이끌어가라.
  • 건강한 취미를 가지고 꾸준한 자기 계발과 신뢰할 수 있는 사람과 깊은 대화를 나누어라. 겸손한 마음으로 자기반성을 하고 작은 성취를 이어가며 자신을 사랑하다 보면 굳이 노력하지 않아도 주변 사람들에게 분에 넘치는 사랑을 받을 수 있다.

 

중요한 문장

 

  • 불안을 극복하는 6가지 말 습관 : 
    1. 나는 할수 있어
    2. 오리려 좋아, 잘된 거야
    3. 이걸로 더 성장할 수 있겠군
    4. 지난번에도 잘했으니 이번에도 잘할 거야
    5. 완벽할 필요는 없어, 부담 갖지 말자
    6. 이건 나를 위해 준비된 기회야
  • 진짜 어른의 특징 6가지
    1. 자신의 감정과 생각을 솔직하게 표현하면서도 타인의 감정과 경계를 존중할 줄 안다.
    2. 책임감을 가지고 자신의 선택과 행동에 대해 책임지며, 결과에 대해 타인을 탓하지 않는다.
    3. 어려움과 문제를 회피하지 않고 정면으로 마주하며, 해결을 위해 적극적으로 노력한다.
    4. 타인의 의견을 경청하고, 필요할 때 타인의 도움을 기꺼이 받아들일 줄 안다.
    5. 감정을 잘 조절하며, 상황에 맞게 성숙하고 적절한 반응을 보인다.
    6. 삶의 우선순위를 명확히 정하고, 중요한 일에 집중하는 능력을 갖추고 있다.
  • 긴장을 하면 할수록 몸이 굳어서 물속으로 가라앉을 것이다. 도리어 긴장을 풀고 자연스럽게 몸을 맡기면 오히려 더 나은 결과로 자유로움을 만끽할 수 있다.
  • 나의 인생을 미루어 보면 가장 큰 문제는 나 자신이었다. 공잔이 달라지고 상황이 달라지고 사람이 달라졌음에도 불구하고 내가 달라진 것이 하나도 없었기에 어디에 가든 비슷한 실수를 반복했다. '자신의 생각을 바꿀 수 없는 사람은 아무것도 바꿀 수 없다' 라고 말한 문학인 조지 버나드 쇼의 말처럼 자신의 생각을 바꿀 수 있는 사람이야말로 모든 것을 바꿀 수 있다.
  • 실패를 두려워하지 말고, 배우고 성장할 수 있는 기회에 집중해야 한다.
    과거는 과거일 뿐. 그때 잘한 일이 있다면 훈장으로 삼고 실패의 기억이 있다면 멋진 미래를 향한 양분으로 사용하면 된다.
  • 앞으로 길이 언제나 평탄할 것이라 기대하지 마라. 좋은 일만 가득하리라 기대하지 마라. 삶은 그렇게 단순하지 않다. 때로는 이해할 수 없고 설명할 수 없는 일들이 당신을 찾아갈 것이다. 하지만 그것이야말로 인간으로서 누릴 수 있는 특권이 아닐까?

 


나의 생각

 이 책에 나오는 심리 증후군들의 상황이나 증상을 읽는 순간 몇몇 증후군은 "나를 이야기하네" 라는 생각이 들었다. 그렇다. 나역시도 나를 돌보지 않고 방치를 했던 것이다. 항상 나보다는 남을 먼저 생각했던 것 같고, 눈치를 보고... 그러는 동안 내 안의 나는 병들어 있던것이다. 40대의 중반을 지나고 있는 나를 조금 더 소중히 나를 바꾸는 마음과 생각을 들게하는 소중한 책이다.

 


한줄 서평

나이가 들면서 다른 사람의 눈치를보고 새로운 환경 변화에 적응하며 민감한 삶을 살아온 나를 알려주는 고마운 책이다.

728x90
반응형
728x90
반응형

드디어 한국시간 1/8 , 현지시간 1/7

색다른 골프 TGL 리그가 개막을 했습니다.

 

개인적으로는 엄청 기대를 하고 있던 리그였습니다.

타이거 우즈, 로리 맥길로이가 설립한 투모로 스포츠에서 시뮬레이션 골프 리그를 만들었기 때문입니다.

오늘 개막전이라 참석한 모습입니다.

(가운데 있는 사람도 설립자 중 한 명.. 골프선수는 아님)


기존과 달리 스크린과 필드 골프를 접목 시켰습니다.

경기장은 스크린 골프존과 필드존으로 나뉘어 숏게임은 필드존에서 직접 치는 방식입니다.

 

경기는 총 15홀입니다. (PAR3 5홀, PAR4 5홀, PAR5 5홀)

또한, 1~9홀은 팀전, 10~15홀은 개인전으로 진행이 됩니다.

 

샷 클락이 존재하여 40초 안에 샷을 해야 합니다. 

40초를 초과하면 1 벌타를 받게 됩니다.

 

타임아웃이 4번 존재하여 각각 전반, 후반에 두 번씩 사용이 가능합니다. 

샷 클락을 심판할 심판이 존재하는 것도 특징입니다.

 

해머와 같은 아이템을 사용해서 점수를 배로 올리는 것이 가능한 시스템이 있었습니다.


팀은 6개의 팀으로 구성이 되어있습니다.

 

  • 애틀랜타 드라이브 골프 클럽
  • 보스턴 커먼 골프
  • 주피터 링크스 골프 클럽
  • 로스앤젤러스 골프 클럽
  • 뉴욕 골프 클럽
  • 더 베이 골프 클럽

 

많은 사람들이 타이거 우즈와 김주형 선수가 속한 주피터 링크스 골프 클럽팀에 관심이 많을 것 같습니다.

저 또한 관심이 있는 클럽인데, 전문가들은 가장 약체 일거라 생각을 많이 하는 것 같습니다.

 

오늘 개막은 뉴욕 골프 클럽과 더 베이 골프 클럽 대결로 TGL 리그의 시작을 알렸습니다.


경기는 생각보다 속도감이 있었습니다.

캐디가 없이 선수들끼리 조언과 도움을 주는 모습도 이색적이었습니다.

 

캐디와 같은 사람이 있긴 하지만 부스에서 아래처럼 조작에 대한 도움이나 골프채관리를 하는 역할이 전부여서 

캐디보다는 도움요원과 같은 느낌이었습니다.

 

경기 중 선수는 마이크와 이어폰을 착용하여 선수들의 대화소리가 중계되고

아나운서는 선수에게 경기 중에 질문을 할 수도 있었던 것 같습니다.

 

확실히 기존 골프와 다른 색다른 재미가 있었습니다.

하지만 보수적인 골퍼에게는 단순한 스크린 게임 이상도 이하도 아닐 것 같은 느낌이 듭니다.

 

728x90

 

제가 생각하는 오늘의 MVP는 스웨덴의 영건 루드비그 오베리 입니다.

저는 처음 이 선수를 보았는데, 간결하면서도 깔끔한 샷을 하는 선수 같았습니다.

25세라 아직도 젊어서 어디까지 올라갈지 굉장히 기대됩니다.

 

오늘의 결과는 더 베이 골프 클럽의 압승입니다.

뉴욕 골프 클럽은 초반부터 적응을 하지 못하는 모습을 보였고,

막판에는 얼굴을 찡그리며 하는 모습을 보이는 등 

필드와 다른 샷감에 당황해하는 모습을 보였습니다.

 

아래는 백스핀이 뭔지 정말 제대로 보여주는 명품 샷이 아닌가 싶습니다.

 

필드에서는 절대로 하지 말아야 하는 선수들의 장난도 볼 수 있었습니다.

 

하루종일 중계를 하는 골프와 달리 경기시간이 2시간 정도 걸리는 것이 좋았습니다.

하지만 해머 아이템을 사용하는 부분에 있어서 운영적인 측면은 팀마다 연구를 좀 해야 할 것 같다는 생각이 듭니다.

필드존에서 퍼팅 및 어프로치는 인조잔디를 사용해서 그런지 

선수들이 적응하지 못하는 부분이 보였습니다.

 

TGL리그가 앞으로 얼마나 성장할 수 있는지 알 수없습니다.

그래도 세계적인 선수들이 팀으로 활약하는 모습을 보는 기회는 많지 않아 TGL 리그가 흥행을 했으면 하는 개인적인 바람입니다.

728x90
반응형
728x90
반응형

 

PyQt5 의 기본 사용방법은 앞 포스팅에서 살펴보았습니다. 이번에는 응용하여 프로그램을 하나 만들어 보겠습니다. 

만들 프로그램은 사진의 GPS 정보를 이용하여 사진과 사진 사이의 거리를 측정하는 프로그램 입니다.


필요한 라이브러리

  1. PyQt5: GUI 애플리케이션 개발.
  2. Pillow (PIL): 사진 파일에서 EXIF 데이터 추출.
  3. geopy: GPS 좌표를 사용한 거리 계산.

설치 명령어

아래 명령어를 사용해 필요한 라이브러리를 설치하세요:

pip install pyqt5 pillow geopy

실행코드

import sys
import os
from PyQt5.QtWidgets import (
    QApplication, QMainWindow, QFileDialog, QListWidget, QVBoxLayout, QPushButton, QLabel, QWidget
)
from PIL import Image
from PIL.ExifTags import TAGS, GPSTAGS
from geopy.distance import geodesic


class GPSDistanceApp(QMainWindow):

    def __init__(self):
        super().__init__()
        self.initUI()
        self.photos = []  # 선택한 사진 경로 리스트
        self.gps_data = []  # 사진의 GPS 정보 리스트

    def initUI(self):
        # 위젯 설정
        self.setWindowTitle("GPS Distance Calculator")
        self.setGeometry(300, 300, 600, 400)

        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)

        layout = QVBoxLayout()

        self.photoList = QListWidget()
        self.resultLabel = QLabel("Distances will appear here.")

        self.selectButton = QPushButton("Select Photos")
        self.selectButton.clicked.connect(self.openFileDialog)

        self.calculateButton = QPushButton("Calculate Distances")
        self.calculateButton.clicked.connect(self.calculateDistances)

        layout.addWidget(self.photoList)
        layout.addWidget(self.selectButton)
        layout.addWidget(self.calculateButton)
        layout.addWidget(self.resultLabel)

        self.centralWidget.setLayout(layout)

    def openFileDialog(self):
        # 여러 사진 선택
        filePaths, _ = QFileDialog.getOpenFileNames(self, "Select Photos", "", "Images (*.jpg *.jpeg *.png)")
        if filePaths:
            self.photos = filePaths
            self.photoList.clear()
            self.photoList.addItems(filePaths)

    def extractGPS(self, photoPath):
        try:
            img = Image.open(photoPath)
            exif_data = img._getexif()
            if not exif_data:
                return None
            gps_info = {}
            for tag, value in exif_data.items():
                tag_name = TAGS.get(tag, tag)
                if tag_name == "GPSInfo":
                    for gps_tag in value.keys():
                        gps_name = GPSTAGS.get(gps_tag, gps_tag)
                        gps_info[gps_name] = value[gps_tag]
            if gps_info:
                return self.convertGPS(gps_info)
            return None
        except Exception as e:
            print(f"Error reading GPS data: {e}")
            return None

    def convertGPS(self, gps_info):
        """Convert GPS EXIF data to latitude and longitude in decimal format."""
        def to_decimal(coord, ref):
            degrees, minutes, seconds = coord
            decimal = degrees + (minutes / 60.0) + (seconds / 3600.0)
            if ref in ['S', 'W']:
                return -decimal
            return decimal

        try:
            lat = to_decimal(gps_info["GPSLatitude"], gps_info["GPSLatitudeRef"])
            lon = to_decimal(gps_info["GPSLongitude"], gps_info["GPSLongitudeRef"])
            return lat, lon
        except KeyError:
            return None

    def calculateDistances(self):
        # GPS 정보 추출
        self.gps_data = [self.extractGPS(photo) for photo in self.photos]

        # 유효하지 않은 GPS 정보 확인
        if None in self.gps_data:
            self.resultLabel.setText("Some photos do not have valid GPS data.")
            return

        # 거리 계산
        distances = []
        for i in range(len(self.gps_data) - 1):
            dist = geodesic(self.gps_data[i], self.gps_data[i + 1]).meters
            distances.append(dist)

        # 결과 출력
        result_text = "Distances between photos:\n"
        for i, dist in enumerate(distances):
            result_text += f"{os.path.basename(self.photos[i])} -> {os.path.basename(self.photos[i + 1])}: {dist:.2f} m\n"
        self.resultLabel.setText(result_text)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = GPSDistanceApp()
    ex.show()
    sys.exit(app.exec_())

 


코드 설명

  1. GUI 구성
    • QListWidget: 선택한 사진 경로를 리스트 형식으로 표시.
    • QPushButton: 파일 선택 및 거리 계산 기능을 트리거.
    • QLabel: 거리 계산 결과를 표시.
  2. 사진 선택
    • QFileDialog.getOpenFileNames: 여러 장의 사진 선택.
    • 선택된 파일 경로를 self.photos 리스트에 저장하고 화면에 표시.
  3. GPS 정보 추출
    • PIL.Image의 _getexif 메서드를 사용해 EXIF 데이터 추출.
    • GPSInfo를 읽어 GPS 좌표를 추출하고, 이를 소수점 형식의 경위도(latitude, longitude)로 변환.
  4. 거리 계산
    • geopy.distance.geodesic: 두 GPS 좌표 간의 직선 거리를 계산.
    • 결과는 미터 단위로 표시.
  5. 결과 출력
    • 사진 간의 거리와 파일 이름을 화면에 표시.

728x90

실행결과

 

 


참고 포스팅

https://tylee82.tistory.com/418

 

PyQt5: QGridLayout으로 깔끔한 레이아웃 만들기

QGridLayout은 PyQt5에서 제공하는 레이아웃 관리 도구 중 하나로, 위젯들을 행(row)과 열(column)로 구성된 그리드 형태로 배치할 수 있습니다.이번 포스팅에서는 QGridLayout의 사용법과 예제 코드를 자세

tylee82.tistory.com

https://tylee82.tistory.com/420

 

QFileDialog를 활용한 파일 열기와 저장하기

QFileDialog는 PyQt5에서 파일 또는 디렉터리를 선택하는 대화 상자를 제공하는 클래스입니다. 파일 열기와 저장을 간단히 구현할 수 있어 응용 프로그램 개발에 자주 사용됩니다. 이번 포스팅에서

tylee82.tistory.com

https://tylee82.tistory.com/413

 

파이썬으로 이미지의 GPS 정보 읽기

사진 속에는 우리가 눈으로 볼 수 없는 다양한 메타데이터가 포함되어 있습니다. 특히 스마트폰이나 GPS 기능이 있는 카메라로 촬영한 사진에는 GPS 정보가 포함될 수 있습니다. 이번 포스팅에서

tylee82.tistory.com

 

728x90
반응형
728x90
반응형

책 제목:
적당히 느슨하게 조금씩 행복해지는 습관

저자: 바쿠@정신과의
읽은 날짜: 2025.01.01

책 표지 이미지


 

책 내용 요약

  • 중요한 것은 자기 자신이 만족스럽다고 느낄 수 있는 생활을 그대로 해 나가는 일입니다.
  • 똑같은 환경이 아닌 남과 나를 더 이상 같은 시선으로 보지 않는 일입니다.
  • 조금이라도 싫고, 괴롭고, 그만두고 싶다면 당신에게는 '도망칠 권리'가 있습니다. 고통스러운 일에서 도망치는 것도 당신이 할 수 있는 스스로를 지키는 방법 중 하나입니다.
  • 성공한 사람들은 꾸준히 노력을 거듭해 온 끝에 당신이 부러워할 성과를 손에 넣은 겁니다. 
  • 질투란 타인에게 제멋대로 등급을 매기고 경쟁하는데 지나지 않습니다.
  • SNS에서 아무리 빛이 나는 사람이라도 크든 작든 누구나 보이지 않는 불행을 안고 있기 마련입니다.
  • 자신이 할 수 있는 일은 전부 무시하고 타인과 비교해서 자신을 깍아 내리고는 우울해합니다. 심하면 마음에 병이 들기도 하지요.
  • 무슨 일을 해도 실패했다고 생각하는 사고 습관이 있는 한, 괴로움에서 해방될 날은 영원히 오지 않습니다.
  • 실패는 끝이 아니라 다음으로 이어지는 기회라는 사실을 이해하고 납득했을 때, 비로소 일에서 느끼던 괴로움은 사라지게 됩니다.
  • 나에게 없는 조건이나 도저히 불가능한 것을 바라면서 신세를 한탄할 게 아니라, 아무리 볼품없다고 생각된다 해도 내가 갖고 있는 카드(성격,재능)로 승부해 나갈 것을 결심하고 그 카드를 어떻게 사용할지를 고심하는 것이 인생을 좋은 방향으로 바꾸는 출발선 입니다.
  • '하지만' '그게 아니라' '어차피' 이 세가지 부정의 단어를 사용하지 않는 것
    말투 하나만 바꿔도 미래에 일어날 일이 상당히 달라닙니다. 공짜로 시작할 수 있고 손해는 조지 않는 일이니 꼭 실천해 보세요. 서서히 긍정적인 방향으로 나아갈 수 있을 거에요.
  • 즉답하지 않는 훈련이 필요합니다.
    화가 날 것 같은 상황을 몇 번이고 머릿속에서 시뮬레이션해 보는것도 효과가 제법 큽니다.
  • 자신의 멘탈이 닳아 없어지는 행동은 피하고 '마음을 채워 주는 것'을 적극적으로 찾아 실천하면서 매일을 만족감으로 가득 채우며 생활하는 것이 좋습니다.
  • 휘둘리지 않고 그냥 넘길 수 있는 강철 같은 마음을 가진다면 당신에게 향하는 험담은 이 세상에서 사라지고 당신은 그 어떠한 소문과 험담에도 아무런 타격을 입지 않게 될 것입니다. 하지만 무슨 일이 있어도 되받아치고 싶을 때는 마음속에서 반격하는 정도로 그치세요.
  • 행복할 행幸과 괴로울 신辛이라는 한자는 구조로 볼 때 가로획 하나가 더 있고 없고의 차이뿐입니다.
    '행복'도 '괴로움'이 될 수 있으며, 또 '괴로움'을 '행복'으로 만들기도 의외로 간단합니다. '사물을 바라보는 시각을 약간 바꾸는 일'은 막대기 하나를 더하는 것과 다름없지요. 스스로의 고지식한 가치관이 이 낙관적은 사고를 매우 어렵게 하고 있다는 것을 알아야 합니다.

 

중요한 문장

 

  • 아무것도 하지 않았으니까 바뀌지 않는게 당연합니다.
  • 실패란 해서는 안 되는 경험이 아니며 특수한 경험도 아닙니다. 실패할지 성공할지는 해 봐야 비로소 알 수 있습니다.
  • 오늘, 지금 이 순간이 당신의 인행에서 가장 젊은 순간입니다. 지금보다 빨리 시작할 수는 없으니 지금 결심해야 합니다.
  • 어느 순간 습관을 깨부수지 않으며 결코 새로운 변화는 찾아오지 않습니다.
  • 필요할 때는 과감히 '도망'치고 '포기'하는 선택을 해야 합니다.
  • 우리는 내가 살아가기 수월하고 편해지기 위해서 다른 사람을 칭찬하는 것입니다.
  • 남을 위해서가 아니라 '나'를 위해서 살아가세요. 우선 나를 알고, 나를 인정하고, 나를 칭찬하고, 나를 허락하세요.

 


 

나의 생각


지금 나의 모습을 나는 얼마나 알고 인정하고 있을까? 사회생활을 하면서 점점 나를 잊어가고 있다는 생각을 이 책을 읽고 하게 되었다. 나는 나의 행복, 그리고 나에게 얼마나 관대하고 칭찬하고 있는지 한번 생각하게 만들어 주는 책이다. 세상을 살아가는 것은 남이 아닌 나인데 너무 나에대해 소홀하지 않았나? 늦은것 같지만 조금이라도 이런 생각을 할 수 있어 다행이다. 

 

728x90
반응형
728x90
반응형

드라이버 정타 연습: 고통과 성취의 기록

드라이버 정타 연습은 지루하기도 하지만, 고통을 동반했다. 아래 사진처럼 손에 굳은살이 생기면서 아픔을 느끼게 될 줄은 몰랐다. 골프를 시작한 이후 이런 위치에 굳은살이 생긴 적은 한 번도 없었다. 이를 보며 그동안 내가 정말 제대로 연습을 하지 않았다는 걸 새삼 깨달았다.

 

장갑도 오래 사용해서 늘어나는 느낌이 들어 교체한 적은 있지만, 구멍이 나서 교체한 건 이번이 처음이다.  


똑딱이 연습의 놀라운 결과

드라이버 똑딱이로 연습하다 보면 가끔 말도 안 되는 볼스피드가 나오곤 한다. 내가 연습하는 아파트 연습장의 기계는 고급 기계는 아니고, 타석마다 센서 감도도 다르다. 그래서 한 타석을 정해서 꾸준히 연습 중인데, 볼스피드가 60 이상, 심지어 66까지 찍힌다.

힘을 빼고 똑딱이로 치는데도 이런 결과가 나오다니 정말 놀랍다. 과거 풀스윙으로 힘껏 쳤을 때보다 볼스피드가 더 빠르고 비거리도 잘 나온다. 이걸 보면 그동안 내가 드라이버를 정말 제대로 치지 못했다는 걸 확신하게 된다.

 

 

똑딱이로 쳤는데 가끔 이렇게 잘 맞으면 기분이 좋다

 


어드레스와 그립의 중요성

똑딱이 연습을 하면서 어드레스와 그립의 중요성도 다시 한번 느끼고 있다. 아래 사진은 내 어드레스와 그립을 기록하기 위해 찍은 것이다.

  • 그립: 뉴트럴보다는 살짝 스트롱 그립을 선호한다.
  • 티 높이: 연습장에서는 60mm 티를 사용한다. 하지만 매트 특성상 체감 높이는 50~55mm 정도로 느껴진다.
  • 티 높이 이유: 드로우 구질을 연습하기 위해서이기도 하고, 높은 티에서 공을 칠 수 있어야 다양한 높이에서 적응할 수 있다는 이야기를 들었기 때문이다.

 

728x90

구질과 스윙의 변화

연습을 계속하다 보면 볼스피드가 60 이상 꾸준히 나오기도 한다. 하지만 여전히 드로우 구질이 제대로 나오지 않을 때도 있다. 또, 공이 출발부터 왼쪽으로 가는 경우가 생기는데, 이는 어깨에 힘이 들어가면서 엎어치는 동작이 원인인 것 같다.

 

샤프트 교체 효과

참고로 샤프트를 교체한 뒤 볼의 직진성은 확실히 좋아졌다. 예전 스탁 샤프트를 썼다면, 지금처럼 직진성이 나오지 않았을 것이다. 이전에는 공이 휘는 게 육안으로 보일 정도였다.

 

똑딱이 연습 중 깨달은 점

똑딱이를 치다가 가끔 하체를 돌리는 실수를 하곤 한다. 하지만 어깨 힘이 빠진 상태에서 헤드가 던져지는 느낌이 드는 순간, 볼스피드는 70을 넘기도 한다. 이런 순간이 올 때마다 제대로 연습하고 있다는 확신이 든다.

그렇지만 스스로 느끼기에 연습이 어느 정도 된 것 같다는 자만심 때문인지, 자꾸 하체를 돌리는 버릇이 생겼다. 이걸 고치지 않으면 안 된다. 아직 똑딱이 연습은 끝나지 않았다. 꾸준히, 올바르게 연습을 이어가야 한다.


이 글은 연습 과정에서의 고통과 작지만 확실한 성취, 그리고 스스로에 대한 반성을 담았다. 아직 갈 길은 멀지만, 꾸준히 연습하다 보면 드라이버 정타 그리고 볼스피드 UP이라는 목표에 한 걸음 더 가까워질 것이다.

 

 

728x90
반응형
728x90
반응형

QFileDialog는 PyQt5에서 파일 또는 디렉터리를 선택하는 대화 상자를 제공하는 클래스입니다. 파일 열기와 저장을 간단히 구현할 수 있어 응용 프로그램 개발에 자주 사용됩니다. 이번 포스팅에서는 QFileDialog의 기본 사용법과 주요 메서드를 설명하고, 간단한 예제 코드를 통해 이를 활용하는 방법을 소개합니다.


예제 코드: 파일 열기와 저장 구현하기

아래 코드는 QFileDialog를 사용해 파일을 열고 저장하는 기능을 구현한 예제입니다.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QAction, QFileDialog


class MyApp(QMainWindow):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 중앙에 텍스트 편집기 추가
        self.textEdit = QTextEdit(self)
        self.setCentralWidget(self.textEdit)

        # 파일 열기 액션
        openFile = QAction('Open', self)
        openFile.setShortcut('Ctrl+O')  # 단축키 설정
        openFile.setStatusTip('Open a file')  # 상태 표시줄 설명
        openFile.triggered.connect(self.showOpenDialog)  # 클릭 시 연결될 메서드 설정

        # 파일 저장 액션
        saveFile = QAction('Save', self)
        saveFile.setShortcut('Ctrl+S')
        saveFile.setStatusTip('Save a file')
        saveFile.triggered.connect(self.showSaveDialog)

        # 메뉴바 생성 및 추가
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')  # 메뉴 이름 지정
        fileMenu.addAction(openFile)  # 메뉴에 'Open' 추가
        fileMenu.addAction(saveFile)  # 메뉴에 'Save' 추가

        # 윈도우 설정
        self.setWindowTitle('QFileDialog Example')  # 창 제목 설정
        self.setGeometry(300, 300, 400, 300)  # 창 위치와 크기 설정
        self.show()

    def showOpenDialog(self):
        """파일 열기 대화 상자"""
        # 파일 열기 대화 상자 호출
        filePath, _ = QFileDialog.getOpenFileName(
            self, 'Open File', '', 'Text Files (*.txt);;All Files (*)'
        )
        if filePath:  # 사용자가 파일을 선택한 경우
            with open(filePath, 'r', encoding='utf-8') as file:
                self.textEdit.setText(file.read())  # 파일 내용을 텍스트 편집기에 로드

    def showSaveDialog(self):
        """파일 저장 대화 상자"""
        # 파일 저장 대화 상자 호출
        filePath, _ = QFileDialog.getSaveFileName(
            self, 'Save File', '', 'Text Files (*.txt);;All Files (*)'
        )
        if filePath:  # 사용자가 저장 위치를 지정한 경우
            with open(filePath, 'w', encoding='utf-8') as file:
                file.write(self.textEdit.toPlainText())  # 텍스트 편집기의 내용을 저장


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())

코드 설명

1. 메인 윈도우 및 텍스트 편집기 구성

  • QMainWindow: PyQt5에서 기본적으로 제공하는 윈도우 위젯으로, 메뉴 바와 상태 표시줄 등을 포함할 수 있습니다.
  • QTextEdit: 다중 줄 텍스트 입력 및 출력 위젯. 중앙에 배치하여 사용자가 텍스트를 입력하거나 파일 내용을 표시합니다.

2. 파일 열기와 저장 액션

  • QAction: 메뉴나 툴바에서 선택할 수 있는 작업(액션)을 정의합니다.
    • setShortcut: 단축키를 지정합니다. 예: Ctrl+O는 파일 열기.
    • setStatusTip: 상태 표시줄에 표시할 텍스트를 설정합니다.
    • triggered.connect: 액션이 트리거되었을 때 호출할 메서드를 연결합니다.

3. 파일 열기 대화 상자

  • QFileDialog.getOpenFileName:
    • 사용자가 파일을 선택하면 선택된 파일의 경로를 반환합니다.
    • filter 인수를 사용하여 특정 파일 형식만 표시할 수 있습니다. 예: Text Files (*.txt);;All Files (*).

4. 파일 저장 대화 상자

  • QFileDialog.getSaveFileName:
    • 사용자가 저장 위치와 파일 이름을 선택하면 그 경로를 반환합니다.
    • 파일 확장자는 filter를 통해 설정할 수 있습니다.

5. 파일 입출력 처리

  • with open(filePath, mode, encoding='utf-8'):
    • 파일을 읽거나 쓸 때 사용합니다.
    • mode='r': 읽기 모드.
    • mode='w': 쓰기 모드.
    • encoding='utf-8': UTF-8 인코딩 사용.
728x90

주요 메서드 정리

  1. QFileDialog.getOpenFileName
    • 파일 열기 대화 상자를 호출합니다.
    • 반환값: (선택된 파일 경로, 선택된 필터).
  2. QFileDialog.getSaveFileName
    • 파일 저장 대화 상자를 호출합니다.
    • 반환값: (선택된 파일 경로, 선택된 필터).
  3. QAction.setShortcut
    • 단축키를 지정합니다.
    • 예: Ctrl+O는 파일 열기에 할당.
  4. QTextEdit
    • setText: 텍스트를 설정합니다.
    • toPlainText: 입력된 텍스트를 가져옵니다.

실행 결과

  1. 파일 열기:
    • 메뉴에서 File > Open을 선택하거나 Ctrl+O를 누르면 파일 열기 대화 상자가 표시됩니다.
    • 선택한 파일의 내용을 텍스트 편집기에 로드합니다.
  2. 파일 저장:
    • 메뉴에서 File > Save를 선택하거나 Ctrl+S를 누르면 파일 저장 대화 상자가 표시됩니다.
    • 텍스트 편집기에 입력한 내용을 저장합니다.


결론

이 예제에서는 QFileDialog를 사용해 파일을 열고 저장하는 기본적인 기능을 구현했습니다. QFileDialog는 다양한 옵션을 제공해 더 복잡한 파일 선택 기능도 구현할 수 있습니다. 이 예제를 응용해 텍스트 파일 외에도 다양한 형식의 파일을 처리해 보세요!

728x90
반응형
728x90
반응형

QPixmap은 PyQt5에서 이미지를 다룰 때 사용되는 대표적인 클래스입니다. 주로 이미지의 표시, 조작, 저장 등에 사용됩니다. 이번 포스팅에서는 QPixmap을 활용해 간단히 이미지를 표시하는 예제를 소개합니다.


샘플 코드: QPixmap으로 이미지 표시

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout
from PyQt5.QtGui import QPixmap


class MyApp(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 1. QLabel 생성
        label = QLabel(self)

        # 2. QPixmap 생성 및 이미지 로드
        pixmap = QPixmap('../img/20231014_164906.jpg')  # 이미지 파일 경로
        pixmap = pixmap.scaled(500, 300)
        label.setPixmap(pixmap)

        # 3. 레이아웃 설정
        vbox = QVBoxLayout()
        vbox.addWidget(label)
        self.setLayout(vbox)

        # 4. 윈도우 설정
        self.setWindowTitle('QPixmap Example')
        self.setGeometry(300, 300, pixmap.width(), pixmap.height())
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())

 


코드 설명

1. QLabel 생성

label = QLabel(self)

 

  • 이미지를 표시할 QLabel 위젯을 생성합니다.
  • QPixmap은 QLabel에 이미지를 연결하여 화면에 표시합니다.

2. QPixmap 생성 및 이미지 로드

pixmap = QPixmap('../img/20231014_164906.jpg')  # 이미지 파일 경로
label.setPixmap(pixmap)

 

 

  • QPixmap('파일 경로'): 지정된 경로의 이미지를 불러옵니다.
  • label.setPixmap(pixmap): QLabel에 QPixmap을 연결하여 이미지를 표시합니다.
  • 이미지 파일은 현재 코드와 동일한 디렉토리에 있어야 합니다.
    • 경로가 다를 경우 전체 경로나 상대 경로를 정확히 지정해 주세요.

3. 레이아웃 설정

vbox = QVBoxLayout()
vbox.addWidget(label)
self.setLayout(vbox)

 

 

  • QVBoxLayout을 이용해 QLabel을 레이아웃에 추가합니다.
  • 이미지를 추가한 레이아웃을 현재 창에 설정합니다.

4. 윈도우 설정

self.setGeometry(300, 300, pixmap.width(), pixmap.height())

 

 

  • 이미지의 크기에 맞춰 윈도우 크기를 동적으로 설정합니다.
  • pixmap.width()와 pixmap.height()를 사용해 이미지의 크기를 가져옵니다.

 

실행 결과

코드를 실행하면 지정한 이미지 파일이 새로운 창에 표시됩니다.

 

728x90

주요 메서드 및 속성

메서드/속성설명

QPixmap('파일 경로') 지정된 경로의 이미지를 불러옵니다.
label.setPixmap(pixmap) QLabel에 QPixmap 객체를 설정합니다.
pixmap.width() 이미지의 너비를 반환합니다.
pixmap.height() 이미지의 높이를 반환합니다.
pixmap.scaled(width, height) 이미지를 지정한 크기로 조정한 새로운 QPixmap 객체를 반환합니다. (비율 유지 옵션을 함께 설정 가능)
pixmap.save('저장 경로') 현재 QPixmap 객체를 파일로 저장합니다.

 


활용 팁

pixmap = pixmap.scaled(200, 200)
  1. 이미지 크기 조정
    • scaled() 메서드를 사용해 이미지를 특정 크기로 조정할 수 있습니다.
    • 원본 비율을 유지하려면 Qt.KeepAspectRatio 옵션을 사용할 수 있습니다.
  2. 이미지 파일 경로
    • 이미지를 프로젝트와 동일한 디렉토리에 두거나, 전체 경로를 명시적으로 작성하세요.
  3. QPixmap과 QImage의 차이
    • QPixmap: 렌더링에 최적화된 클래스. 주로 화면 표시용.
    • QImage: 이미지 데이터의 읽기/쓰기, 픽셀 조작에 적합.

결론

QPixmap은 PyQt5에서 이미지를 표시하는 데 필수적인 클래스입니다. 이번 예제를 참고하여 프로젝트에 이미지를 손쉽게 추가해 보세요!

다음 포스팅에서는 QPixmap을 활용한 이미지 크기 조정과 저장 방법에 대해 다뤄보겠습니다. 😊

728x90
반응형
728x90
반응형

QGridLayout은 PyQt5에서 제공하는 레이아웃 관리 도구 중 하나로, 위젯들을 행(row)과 열(column)로 구성된 그리드 형태로 배치할 수 있습니다.
이번 포스팅에서는 QGridLayout의 사용법과 예제 코드를 자세히 설명하겠습니다.


예제 코드: 간단한 QGridLayout 구현

아래는 QGridLayout을 이용해 간단한 사용자 입력 폼을 구현한 코드입니다.

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QGridLayout, QLabel, QLineEdit, QTextEdit)


class MyApp(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 1. GridLayout 생성
        grid = QGridLayout()
        self.setLayout(grid)

        # 2. 위젯 추가
        grid.addWidget(QLabel('Title:'), 0, 0)    # (0, 0) 위치에 Label 추가
        grid.addWidget(QLabel('Author:'), 1, 0)  # (1, 0) 위치에 Label 추가
        grid.addWidget(QLabel('Review:'), 2, 0)  # (2, 0) 위치에 Label 추가

        grid.addWidget(QLineEdit(), 0, 1)        # (0, 1) 위치에 QLineEdit 추가
        grid.addWidget(QLineEdit(), 1, 1)        # (1, 1) 위치에 QLineEdit 추가
        grid.addWidget(QTextEdit(), 2, 1)        # (2, 1) 위치에 QTextEdit 추가

        # 3. 윈도우 설정
        self.setWindowTitle('QGridLayout')
        self.setGeometry(300, 300, 300, 200)
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())

코드 설명

1. QGridLayout 생성

grid = QGridLayout()
self.setLayout(grid)

 

  • QGridLayout 객체를 생성하고, self.setLayout()을 통해 현재 QWidget에 레이아웃으로 설정합니다.
  • 이제 생성한 그리드 레이아웃에 위젯을 자유롭게 추가할 수 있습니다.

2. 위젯 추가

 

grid.addWidget(QLabel('Title:'), 0, 0)
grid.addWidget(QLabel('Author:'), 1, 0)
grid.addWidget(QLabel('Review:'), 2, 0)
  • addWidget(widget, row, column) 메서드를 사용해 특정 위치에 위젯을 추가합니다.
  • 여기서 (row, column)은 그리드 내 위젯이 배치될 위치를 의미합니다.
    • 예: 0, 0은 첫 번째 행, 첫 번째 열을 뜻합니다.
  • 예제에서는 제목, 저자, 리뷰라는 라벨을 (0, 0), (1, 0), (2, 0) 위치에 추가했습니다.

3. 입력 위젯 배치

grid.addWidget(QLineEdit(), 0, 1)
grid.addWidget(QLineEdit(), 1, 1)
grid.addWidget(QTextEdit(), 2, 1)

 

 

  • 텍스트를 입력받는 위젯을 라벨의 오른쪽에 배치했습니다.
    • (0, 1): 제목 입력란
    • (1, 1): 저자 입력란
    • (2, 1): 리뷰 입력란
  • QLineEdit: 한 줄 텍스트 입력을 위한 위젯입니다.
  • QTextEdit: 여러 줄 텍스트 입력을 위한 위젯입니다.

4. 윈도우 설정

self.setWindowTitle('QGridLayout')
self.setGeometry(300, 300, 300, 200)
self.show()

 

 

  • setWindowTitle: 윈도우 제목을 설정합니다.
  • setGeometry: 윈도우의 위치와 크기를 지정합니다.
    • (x, y, width, height) 순서로 설정됩니다.

실행 결과

코드를 실행하면 아래와 같은 윈도우가 생성됩니다.

 

 

  • TitleAuthor는 한 줄 입력란(QLineEdit),
  • Review는 여러 줄 입력란(QTextEdit)으로 구성되어 있습니다.
  •  

 

QGridLayout의 특징

  • 그리드 레이아웃은 행(row)과 열(column)을 기준으로 위젯을 배치합니다.
  • 여러 개의 위젯을 체계적으로 정렬할 때 유용합니다.
  • 하나의 셀에 여러 행 또는 열을 차지하도록 설정할 수도 있습니다.

QGridLayout 추가 메서드

메서드설명

addWidget(widget, row, column) 지정된 위치에 위젯을 추가합니다.
addWidget(widget, row, column, rowspan, colspan) 위젯을 여러 행/열에 걸쳐 배치합니다.
setSpacing(spacing) 셀 간의 간격을 설정합니다.
setColumnStretch(column, value) 특정 열의 비율을 설정합니다. (값이 클수록 공간을 더 많이 차지함)
setRowStretch(row, value) 특정 행의 비율을 설정합니다.

 

활용 팁

  1. 다양한 위젯 배치
    QGridLayout은 버튼, 슬라이더, 콤보박스 등 다양한 위젯을 배치할 수 있습니다.
  2. 동적 레이아웃 구성
    위젯을 추가/삭제하거나 크기를 조정하여 반응형 UI를 구성할 수 있습니다.
  3. 공간 비율 조정
    setColumnStretch()와 setRowStretch()를 사용하면 특정 행이나 열이 더 많은 공간을 차지하도록 설정할 수 있습니다.

결론

QGridLayout은 PyQt5에서 유연하고 강력한 레이아웃 관리 도구로, 복잡한 UI를 간단히 구현할 수 있습니다.
이번 포스팅에서 소개한 예제를 바탕으로 QGridLayout을 활용한 다양한 프로젝트를 시도해 보세요! 😊

 

728x90
반응형
728x90
반응형

PyQt5에서 QPushButton은 가장 기본적인 UI 위젯 중 하나로, 사용자가 특정 작업을 실행하도록 트리거 역할을 합니다. 이번 포스팅에서는 QPushButton의 주요 메서드와 시그널(이벤트)에 대해 살펴보고, 이를 활용한 간단한 예제 코드를 작성해 보겠습니다.


QPushButton의 주요 기능

QPushButton의 생성

QPushButton은 텍스트, 아이콘, 스타일 등을 지정할 수 있는 버튼 위젯입니다.
다음은 QPushButton의 생성 방법과 주요 속성입니다.

btn = QPushButton('Button Text', parent)

 

  • 첫 번째 인자: 버튼의 텍스트를 설정합니다.
  • 두 번째 인자: 버튼의 부모 위젯을 지정합니다.

주요 메서드와 속성

메서드/속성설명

setText(text) 버튼의 텍스트를 설정합니다.
text() 버튼의 텍스트를 반환합니다.
setEnabled(state) 버튼의 활성화 여부를 설정합니다. (True: 활성화, False: 비활성화)
isEnabled() 버튼이 활성화 상태인지 확인합니다.
setCheckable(state) 버튼을 토글 가능한 상태로 설정합니다. (True: 체크 가능, False: 체크 불가)
isChecked() 버튼이 체크된 상태인지 확인합니다. (setCheckable(True) 설정 후 사용 가능)
setIcon(icon) 버튼에 아이콘을 추가합니다.

QPushButton의 주요 시그널(이벤트)

시그널설명

clicked() 버튼이 클릭되었을 때 발생합니다.
pressed() 버튼이 눌렸을 때 발생합니다.
released() 버튼을 눌렀다 떼었을 때 발생합니다.
toggled(state) 버튼이 체크 상태가 변경될 때 발생합니다. (setCheckable(True) 설정 후 사용 가능)

 

728x90

예제 코드: QPushButton의 다양한 기능 활용

다음은 QPushButton의 주요 기능을 활용한 간단한 예제입니다.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout


class MyApp(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 체크 가능한 버튼
        btn1 = QPushButton('&Button1', self)
        btn1.setCheckable(True)  # 토글 가능한 버튼 설정
        btn1.toggle()  # 초기 상태를 체크 상태로 설정

        # 일반 버튼
        btn2 = QPushButton(self)
        btn2.setText('Button&2')

        # 비활성화된 버튼
        btn3 = QPushButton('Button3', self)
        btn3.setEnabled(False)  # 버튼 비활성화

        # 레이아웃 설정
        vbox = QVBoxLayout()
        vbox.addWidget(btn1)
        vbox.addWidget(btn2)
        vbox.addWidget(btn3)

        self.setLayout(vbox)
        self.setWindowTitle('QPushButton Example')
        self.setGeometry(300, 300, 300, 200)
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())

코드 설명

  1. 버튼 1 (btn1)
    • setCheckable(True)를 사용해 토글 버튼으로 설정했습니다.
    • toggle()로 초기 상태를 체크 상태로 설정했습니다.
  2. 버튼 2 (btn2)
    • setText()를 통해 버튼의 텍스트를 설정했습니다.
    • 텍스트에는 &를 사용하여 **단축키(Alt+B)**를 추가했습니다.
  3. 버튼 3 (btn3)
    • setEnabled(False)를 통해 비활성화 상태로 설정했습니다.
    • 사용자가 클릭할 수 없는 상태로 만들어졌습니다.

실행 결과

 


QPushButton의 시그널 활용 예시

다음은 버튼의 주요 시그널을 활용한 예제입니다.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout


class MyApp(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.btn = QPushButton('Click Me', self)
        self.btn.clicked.connect(self.on_click)
        self.btn.pressed.connect(self.on_press)
        self.btn.released.connect(self.on_release)

        vbox = QVBoxLayout()
        vbox.addWidget(self.btn)

        self.setLayout(vbox)
        self.setWindowTitle('QPushButton Signals')
        self.setGeometry(300, 300, 300, 200)
        self.show()

    def on_click(self):
        print('Button clicked!')

    def on_press(self):
        print('Button pressed!')

    def on_release(self):
        print('Button released!')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())

 


실행 결과

  1. 버튼을 누르면 "Button pressed!" 메시지가 출력됩니다.
  2. 버튼을 뗄 때 "Button released!" 메시지가 출력됩니다.
  3. 클릭 동작이 완료되면 "Button clicked!" 메시지가 출력됩니다.


결론

PyQt5의 QPushButton은 버튼 하나만으로도 다양한 상호작용과 UI 구성을 지원합니다.

  • 기본적으로 클릭 이벤트를 처리하거나, 토글 가능한 상태를 설정할 수 있습니다.
  • 시그널(이벤트)을 활용하면 버튼과 사용자 간의 상호작용을 보다 유연하게 처리할 수 있습니다.

이번 포스팅을 통해 QPushButton의 기본적인 사용법을 익히고, 자신만의 PyQt5 프로젝트에 활용해 보세요! 😊

728x90
반응형
728x90
반응형

드라이버 정타 연습: 지루함을 이겨내다

하루하루 드라이버 똑딱이 연습은 정말 지루하다. 연습장에 갈 때는 드라이버와 7번 아이언 두 클럽만 들고 나선다. 한 시간 동안 연습을 하지만 대부분은 똑딱이로 볼을 친다. 정말 지루하다.
가끔은 마음속에서 ‘그냥 후려치고 싶다’는 생각이 들지만, 그 감정을 꾹 참고 아이언부터 똑딱이 연습을 시작한다. 아이언 똑딱이는 주로 어깨에 힘을 빼는 것에 집중해서 훈련한다.

 


 

볼의 궤적 변화

얼마 전 포스트에서 공이 오른쪽으로 출발해 왼쪽으로 돌아오지 않는 문제를 이야기했었다.
👉 [이전 포스트 보기]

 

드라이버 정타 연습 - 똑딱이부터

드라이버 똑딱이 연습, 나의 도전기현재 제가 사는 아파트에는 작은 골프 연습장이 있다. 비록 브랜드를 잘 모르는 스크린 타석 8개뿐이지만, 이런 환경에서 연습할 수 있다는 게 얼마나 다행인

tylee82.tistory.com

 
 
당시 똑딱이 연습으로 나온 볼의 궤적은 푸쉬나 스트레이트가 대부분이었다.

 

 
그런데 지루함을 참고 꾸준히 연습했더니 드디어 드로우성 구질이 나타나기 시작했다. 심지어 가끔은 헤드를 던진다는 느낌이 드는 순간도 있었다. 정말 신기하다. 그동안 내가 진짜 ‘연습다운 연습을 해본 적이 없었구나’ 하는 생각이 들었다.


솔직히 프로가 아니고서야 한 가지 훈련을 몇 날 며칠씩 반복하는 사람이 얼마나 될까? 하지만 이렇게 꾸준히 연습하니 변화가 보이기 시작했다.

 


연습하면서 느낀 점

연습 중 깨달은 몇 가지 중요한 포인트를 정리해본다.

  1. 백스윙 시 절대로 스웨이가 나오면 안된다.
  2. 백스윙 탑에서는 손목이 꺽이는 커핑 동작이 없어야 한다.
  3. 어깨에 힘이 들어가면 절대로 헤드를 던질 수 없다.
  4. 백스윙 궤도는 플렛하게 해야 한다.

정타 연습의 의미

처음에도 말했지만, 똑딱이 연습은 정말 지루하다. 하지만 꾸준히 정타를 연습하면 내 스윙의 문제점을 스스로 알 수 있게 된다. 또한, 왜 정타를 맞추지 못하는지 원인을 찾으려는 노력이 생긴다.
마지막으로 나의 가장 큰 문제인 상하체 분리어깨 힘 빼기를 위한 참고 영상을 공유한다. 이 영상에서 말하는 느낌이 정말 중요하니 꼭 확인해 보기를 추천한다.

728x90

참고 영상

👉 “풍차 돌리기” 이걸 배우고 골프 인생이 바뀌었다.


드라이버 정타는 하루아침에 이루어지지 않는다. 하지만 지루함을 이겨내고 꾸준히 연습하면 분명 변화가 찾아올 것이다. 오늘도 다시 똑딱이를 하며 나만의 올바른 스윙을 만들어 나가자.

728x90
반응형

+ Recent posts