0

我一直在制作一个允许用户复选框的应用程序。根据他们检查的框,它将显示不同的信息。我决定为这个项目使用 PySimpleGUI。我做了 6 个复选框和一个文本输入,我希望用户能够在复选框之间进行选择,并在文本输入框中输入电影的标题。根据他们选择的复选框,它将根据在文本输入中输入标题的电影显示不同的信息。

  • 当我尝试处理在文本输入中输入的标题值时,它会处理所有值,包括复选框的布尔值。我的代码试图处理的信息是:{0: ;'my input', 'Title': True, 'Year': False...}. 我只需要处理my input/电影标题输入,而不是复选框的布尔值。

这是我的代码示例(作为参考,我还使用 IMDBPY 库来搜索电影(我已经完成了工作,问题是该id = search[0].movieID行正在处理太多的值。):

         def run_code():
            global name
            while True:
                event, value = window.read()
                if event == 'SEARCH':
                    print(values)
                    name = str(values)[5:-2]
    
                print('Please wait while your results load...')
                search = ia.search_movie(name)
    
                id = search[0].movieID

            if values['Title'] == True:
                print(movie_title)

我正在尝试让我的代码搜索电影标题的 ID,该 ID 将由用户在输入字段中输入,然后(在底部)并打印电影标题,具体取决于他们是否选中了标题复选框。在这一点上,我只是收到一个错误消息id = search[0].movieID IndexError: list index out of range)据我了解id = search[0].movieID,它采用了太多的值(事实上,它正在接受所有值、输入和复选框)我只希望它接受文本输入值。

我应该如何分散价值观来处理这个问题?

4

1 回答 1

0

在 sg 元素中定义键。values然后,您可以从您需要的项目中挑选。例如:

def test():
    layout = [[sg.Text('Movie title:'), sg.Input(key='input')],
              [sg.Checkbox('Title', key='title'), sg.Checkbox('Reverse title', key='reverse')],
              [sg.Button('Search', enable_events=True), sg.Cancel()]
              ]
    window = sg.Window('My Window', layout, finalize=True)

    while True:
        event, values = window.read()
        print(f'event = {event}, values = {values}')
        if event in (sg.WINDOW_CLOSED, 'Cancel', 'Exit'):
            break
        if event == 'Search':
            print('Searching now...')
            if values['title']:
                print(f'Title = {values["input"]}')
            if values['reverse']:
                print(f'Reverse title = {values["input"][::-1]}')
            # any other action as needed

例如,当您选中两个复选框并单击搜索时,您将获得

event = Search, values = {'input': 'abcde', 'title': True, 'reverse': True}
Searching now...
Title = abcde
Reverse title = edcba

现在您可以确定用户输入的标题是正确的。

除此之外,你应该检查你得到的值search = ia.search_movie(name)。对于在数据库中找不到的标题,你可能会得到 None ,这就是id = search[0].movieID你得到的地方,IndexError: list index out of range因为没有None[0]. 所以,你可能想添加类似的东西

if search is None:
    print('Not found!')
    continue
于 2021-03-21T22:32:28.603 回答