import sys from PyQt5.QtWidgets import ( QApplication, QWidget, QPushButton, QGridLayout, QTextEdit, QHBoxLayout,QSizePolicy, QInputDialog, QTableWidget, QTableWidgetItem, QVBoxLayout ) import pandas as pd from tabulate import tabulate from PyQt5.QtGui import QIntValidator, QFont from collections import Counter import matplotlib.pyplot as plt class MyWindow(QWidget): def __init__(self): super().__init__() self.setWindowTitle('버튼 고정 크기 + 텍스트박스 비율 조절') self.setGeometry(100, 100, 500, 300) # 오른쪽: 읽기 전용 텍스트 박스 self.text_box = QTextEdit() self.text_box.setReadOnly(True) main_layout = QHBoxLayout() grid_layout = QGridLayout() # 텍스트박스가 가로로 자유롭게 늘어나도록 사이즈 정책 설정 self.text_box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) font = QFont("맑은 고딕", 15, QFont.Bold) self.text_box.setFont(font)
# 버튼별 개별 함수 연결 btn_texts = [ ("1. alert log file 뒷부분", self.on_click_btn1), ("2. 오라클 에러 20개 이상인것 시각화", self.on_click_btn2), ("3. 전체 에러 메시지 종류 개수 세기", self.on_click_btn3), ("버튼 4(구현예정)", self.on_click_btn4), ("버튼 5(구현예정)", self.on_click_btn5), ("버튼 6(구현예정)", self.on_click_btn6), ("버튼 7(구현예정)", self.on_click_btn7), ("버튼 8(구현예정)", self.on_click_btn8), ("버튼 9(구현예정)", self.on_click_btn9), ]
idx = 0 for i in range(3): for j in range(3): btn = QPushButton(btn_texts[idx][0]) btn.clicked.connect(btn_texts[idx][1]) grid_layout.addWidget(btn, i, j) idx += 1
# 레이아웃에 추가 main_layout.addLayout(grid_layout) main_layout.addWidget(self.text_box)
self.setLayout(main_layout) # 각 버튼 클릭 시 텍스트 박스에 출력하는 함수들 def on_click_btn1(self): oracle_alert = open("C:\\data\\alert_log.txt", encoding='utf8') oracle_text=oracle_alert.read() text, ok = QInputDialog.getText(self, "입력창", "텍스트를 입력하세요:") if ok and text: length = int(text) self.text_box.setText(oracle_text[-length:])
def on_click_btn2(self): # oracle_alert = open("C:\\data\\alert_log.txt", encoding='utf8') # oracle_text=oracle_alert.read() # lines = oracle_text.split() # # 사용자에게 문자열 입력 받기 # text, ok = QInputDialog.getText(self, "입력창", "텍스트를 입력하세요:") # if ok and text: # self.text_box.setText(f'{oracle_text.count(str(text))}번 발생했습니다.')
oracle_alert = open("C:\\data\\alert_log.txt", encoding='utf8') oracle_text=oracle_alert.read() lines = oracle_text.split() error =[] for i in lines: if 'ORA-' in i: error.append(i.split(' ')[0].strip(':')) df_error= pd.DataFrame( list( Counter(error).items() ),columns=['에러번호','건수']).sort_values(by='건수',ascending=False) filtered = df_error[df_error['건수']>=20] fig, ax = plt.subplots() bars = plt.bar(filtered['에러번호'],filtered['건수'],color='lightcoral') # ✅ 각 막대 위에 숫자 출력 for bar in bars: height = bar.get_height() ax.text( bar.get_x() + bar.get_width() / 2, # 막대 가운데 height, # 막대 꼭대기 f'{int(height)}', # 정수로 출력 ha='center', va='bottom', fontsize=10 ) plt.xticks(rotation=45) plt.show()
def on_click_btn3(self): oracle_alert = open("C:\\data\\alert_log.txt", encoding='utf8') oracle_text=oracle_alert.read() lines = oracle_text.split() error =[] for i in lines: if 'ORA-' in i: error.append(i.split(' ')[0].strip(':')) self.text_box.setText(str(Counter(error))) def on_click_btn4(self): oracle_alert = open("C:\\data\\alert_log.txt", encoding='utf8') oracle_text=oracle_alert.read() lines = oracle_text.split() error =[] for i in lines: if 'ORA-' in i: error.append(i.split(' ')[0].strip(':')) df_error= pd.DataFrame( list( Counter(error).items() ),columns=['에러번호','건수']).sort_values(by='건수',ascending=False) filtered = df_error[df_error['건수']>=20] fig, ax = plt.subplots() bars = plt.bar(filtered['에러번호'],filtered['건수'],color='lightcoral') # ✅ 각 막대 위에 숫자 출력 for bar in bars: height = bar.get_height() ax.text( bar.get_x() + bar.get_width() / 2, # 막대 가운데 height, # 막대 꼭대기 f'{int(height)}', # 정수로 출력 ha='center', va='bottom', fontsize=10 ) plt.xticks(rotation=45) plt.show() def on_click_btn5(self): self.text_box.setText("버튼 5 클릭됨!")
def on_click_btn6(self): self.text_box.setText("버튼 6 클릭됨!")
def on_click_btn7(self): self.text_box.setText("버튼 7 클릭됨!")
def on_click_btn8(self): self.text_box.setText("버튼 8 클릭됨!")
def on_click_btn9(self): self.text_box.setText("버튼 9 클릭됨!")
if __name__ == "__main__": app = QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_())
|