значение не возвращается из программы - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть следующий код:

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 - это файл, написанный лично, и это работает. Я проверил его, и он возвращает ожидаемые значения при непосредственном запуске. Тем не менее, я не совсем уверен, где я ошибся. Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 09 февраля 2020

Есть несколько отдельных проблем с вашим текущим кодом.

Во-первых, простое изменение переменной found не приведет к обновлению Label. Вместо этого вы можете сделать Tkinter StringVar для хранения текста, который вы хотите отобразить, что приведет к обновлению Label при каждом его изменении. См. Пример в разделе «Шаблоны» Label документов .

Вторая проблема заключается в том, что при запуске функции DisplayDevNum необходимо сохранить выходные данные: сам по себе запуск функции не делает ничего. Поэтому вместо

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

вам нужно сделать что-то вроде этого:

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

Однако простое возвращение значения из chng_srch не приведет к обновлению found или метки содержание. Чтобы изменить переменную found (при условии, что found теперь является StringVar, используемым Label), вам не нужно ничего возвращать из ваших функций, но вам нужно mark found в качестве глобальной переменной (обратите внимание, что многие люди считают глобальные переменные плохой практикой в ​​большинстве ситуаций) Другой вариант - сохранить Label в качестве переменной, а функция chng_srch явно обновит содержимое Label.

...