【问题标题】:no value being returned from program程序没有返回值
【发布时间】:2020-05-24 16:43:33
【问题描述】:

我有以下代码:

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 导入是个人编写的文件,并且有效。我已经对其进行了测试,它在直接运行时返回了预期的值。也就是说,我不完全确定我哪里出错了。有人可以帮忙吗?

【问题讨论】:

  • 你能把你想打印的那部分代码贴出来吗?
  • 标签(tab1, text = found[0]).grid(column = 1, row = 2)
  • “没有从我的退货中得到任何输出”:您无法向command=... 退货。阅读Tkinter.Label.config-method - option text=

标签: python tkinter return return-value


【解决方案1】:

您当前的代码存在一些单独的问题。

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

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

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

你需要这样做:

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

但是,仅仅从chng_srch 返回一个值不会更新found 或标签内容。要更改 found 变量(假设 found 现在是 StringVarLabel 使用),您不需要从函数中返回任何内容,但您确实需要 mark found as a global variable(请注意在大多数情况下,许多人认为全局变量是不好的做法)。另一种选择是将Label 保留为变量,并让chng_srch 函数显式更新Label 的内容。

【讨论】:

  • 您无法将任何内容返回给command=...,请重新考虑您的答案。
  • 虽然我肯定应该更清楚,但我并不是说该命令需要返回一个值。我试图解释为什么使用return 的方式不起作用。按钮启动的功能当然需要显式更新标签或使用全局变量。
猜你喜欢
  • 2020-06-30
  • 2019-08-27
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 2015-05-16
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
相关资源
最近更新 更多