首页 > 解决方案 > 如何处理空列表小部件

问题描述

我收到了 Excel 数据并创建了一个程序,将其分为三个标准。但是,该程序仅在三个列表小部件中的每一个中都有文件时才有效。如果listwidget中没有文件,你能告诉我除了那部分之外是否还有其他方法可以操作它?

附件是下面的程序屏幕。 在此处输入图像描述

下面是代码。请理解,我们只展示了部分代码。

BASE_DIR = os.path.dirname(os.path.abspath(__file__))

form_class_main = uic.loadUiType(BASE_DIR + r"\\AE_main2.ui")[0]
class MainWindow(QMainWindow, QWidget, form_class_main):

def __init__(self):
    super().__init__()
    self.setupUi(self)
    self.btn_open.clicked.connect(self.showDialog)
    self.btn_next.clicked.connect(self.result)
    self.item_right.clicked.connect(self.create_table)

    #데이터 옮기기 버튼 이벤트
    self.left1.clicked.connect(self.clicked_left1_button)
    self.right1.clicked.connect(self.clicked_right1_button)
    self.left2.clicked.connect(self.clicked_left2_button)
    self.right2.clicked.connect(self.clicked_right2_button)
    self.left3.clicked.connect(self.clicked_left3_button)
    self.right3.clicked.connect(self.clicked_right3_button)

def clicked_right1_button(self):
    global path, team_biz
    self.move_current_item(self.listWidget, self.team_business)
    n = self.team_business.count()
    team_biz = [] 
    for a in range(0, n): # qlistWidget 에 올라가있는 현재 파일 목록 출력
        if n == 0:
            return team_biz
        text = self.team_business.item(a).text()
        dirpath = path + r"/{}".format(text)
        team_biz.append(dirpath)

def clicked_left1_button(self):
    self.move_current_item(self.team_business, self.listWidget)

def clicked_right2_button(self):
    global path, team_ath
    self.move_current_item(self.listWidget, self.team_athletic)
    n = self.team_athletic.count()
    team_ath = []
    if n == 0:
        return
    for a in range(0, n):
        if n == 0:
            return team_ath
        text = self.team_athletic.item(a).text()
        dirpath = path + r"/{}".format(text)
        team_ath.append(dirpath)
    print(team_ath)

def clicked_left2_button(self):
    self.move_current_item(self.team_athletic, self.listWidget)

def clicked_right3_button(self):
    global path, team_env
    self.move_current_item(self.listWidget, self.team_environment)
    n = self.team_environment.count()
    team_env = []
    for a in range(0, n): # qlistWidget 에 올라가있는 현재 파일 목록 출력
        if n == 0:
            return team_env
        text = self.team_environment.item(a).text()
        dirpath = path + r"/{}".format(text)
        team_env.append(dirpath)
    print(team_env)

def clicked_left3_button(self):
    self.move_current_item(self.team_environment, self.listWidget)

def move_current_item(self, src, dst):
    if src.currentItem():
        row = src.currentRow()
        dst.addItem(src.takeItem(row))
            
def showDialog(self): # 읽은 파일 이름추출
    files = QFileDialog.getOpenFileNames(self, "파일 선택", '/', "Excel Files(*.xlsx *xls *csv)")
    global path
    fnames = files[0]
    print(type(fnames))
    for i in fnames: # 파일의 경로와 파일명 따로 분리
        s = os.path.basename(f'{i}')
        path = os.path.dirname(f'{i}')
        self.listWidget.addItem(s)

def create_table(self): #받은 엑셀파일 전처리 작업
    pd.options.display.float_format = '{:.5f}'.format
    global AE_cor,team_env, team_biz, team_ath
    AE_cor = pd.DataFrame()
    biz_cor = pd.DataFrame()
    ath_cor = pd.DataFrame()
    env_cor = pd.DataFrame()

    for i in team_biz:
        biz_team = pd.read_excel(f'{i}')
        ......

如果列表小部件中没有文件,则会出现以下错误。

  File "c:\Users\상훈\Desktop\python workspace\.vscode\business_expenses\Agency_expense.py", line 154, in create_table
for i in team_biz:
NameError: name 'team_biz' is not defined

标签: pythonpyqt5qlistwidget

解决方案


要快速处理此问题,请更改:

for i in team_biz:

到:

try:
    team_biz
except NameError:
    team_biz = []
for i in team_biz:

有许多更优雅的方法来处理这个问题,但这会让你继续前进。一旦您的代码完全可操作,您可以改进像这样的快速修复以使您的代码更好。


推荐阅读