首页 > 解决方案 > 程序没有返回值

问题描述

我有以下代码:

import time
import warnings
import numpy as np
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
import external
import excelwork

window = Tk()
window.title('My Sample Solution')
window.geometry('700x500')
window.configure(background = 'green')
rows = 0
while rows < 50:
    window.rowconfigure(rows, weight = 1)
    window.columnconfigure(rows, weight = 1)
    rows += 1
found = ['']

#Label Input:
Label(window, text='Search For: ').grid(column = 0, row = 0)
#Dropdown select search
def DisplayDevNum():
    search_for = Srch.get()
    found = excelwork.srch_knums(int(search_for))
    #This is where you choose what to do with the information
    return found

def DisplayDevAdd():
    search_for = Srch.get()
    found = excelwork.srch_add(str(search_for))
    #This is where you choose what to do with the information
    return found

def DisplayDevCty():
    search_for = Srch.get()
    found = excelwork.srch_cty(str(search_for))
    #This is where you choose what to do with the information
    return found

def DisplayDevStt():
    search_for = Srch.get()
    found = excelwork.srch_stt(str(search_for))
    #This is where you choose what to do with the information
    return found

def DisplayStrNum():
    search_for = Srch.get()
    found = excelwork.srch_snums(int(search_for))
    #This is where you choose what to do with the information
    return found

def DisplayStrName():
    search_for = Srch.get()
    found = excelwork.srch_stnm(str(search_for))
    #This is where you choose what to do with the information
    return found


def chng_srch():
    srch_choices.get()
    if srch_choices == options[0]:
        DisplayDevNum()
        return found()
    if srch_choices == options[1]:
        DisplayDevAdd()
        return found()
    if srch_choices == options[2]:
        DisplayDevCty()
        return found()
    if srch_choices == options[3]:
        DisplayDevStt()
        return found()
    if srch_choices == options[4]:
        DisplayStrNum()
        return found()
    if srch_choices == options[5]:
        DisplayStrName()
        return found()

options = ['Device Number','Device Address','Device City','Device State','Store Number','Store Name']

srch_choices = ttk.Combobox(window, values = options)
srch_choices.grid(row = 0, column = 1)

#Input Entry
Srch = Entry(window)
Srch.grid(column = 2, row = 0)



display_tabs = ttk.Notebook(window)
display_tabs.grid(row = 3, column = 0, columnspan = 50, rowspan = 47, sticky = 'NESW')
tab1 = ttk.Frame(display_tabs)
display_tabs.add(tab1, text = 'Info')

Label(tab1, text = 'Kiosk ID: ').grid(column = 0, row = 0)
Label(tab1, text = found[0]).grid(column = 1, row = 0)


#Go Button
Button(window, text = 'Go', command = chng_srch).grid(column = 3, row = 0)



window.mainloop()

我正在尝试将我的函数的值打印为搜索结果。但是,我没有从我的回报中得到任何输出。我的 excelwork 导入是个人编写的文件,并且有效。我已经对其进行了测试,它在直接运行时返回了预期的值。也就是说,我不完全确定我哪里出错了。有人可以帮忙吗?

标签: pythontkinterreturnreturn-value

解决方案


您当前的代码有几个单独的问题。

首先,简单地更改found变量不会更新Label. 您可以改为创建一个 TkinterStringVar来保存您要显示的文本,这将导致Label在它发生更改时进行更新。有关此示例,请参阅Label 文档的模式部分。

第二个问题是,当你运行DisplayDevNum函数时,你需要保存输出——运行函数本身实际上并没有做任何事情。所以而不是做

if srch_choices == options[0]:
        DisplayDevNum()
        return found()

你需要做这样的事情:

if srch_choices == options[0]:
        return DisplayDevNum()

但是,简单地返回一个值chng_srch不会更新found标签内容。要更改变量found假设found现在StringVarLabel_ )。另一种选择是将 保留为变量,并让函数显式更新内容。foundLabelchng_srchLabel


推荐阅读