gpt4 book ai didi

python - 将变量从组合框传递到被调用函数

转载 作者:行者123 更新时间:2023-12-01 02:35:08 25 4
gpt4 key购买 nike

我试图将变量从 tkinter 组合框传递到单击“运行”按钮时调用的函数。我对 python 比较陌生,我尝试过的每个选项都会产生错误 - 主要是变量未定义。我相信这是因为我没有在正确的地方定义它。非常感谢任何帮助。

from tkinter import *
from tkinter import ttk
from URL_Generator import crawl_site

listFile = open('regions1.txt','r')

root = Tk()
root.configure()
varItems = StringVar(root, value='')

class MainWindow(Frame):
def __init__(self,master = None):
Frame.__init__(self,master)
self.master = master
self.grid()
self.create_widgets()

def create_widgets(self):
"""Create Window Layout"""
self.label = Label(self, text="List Items").pack()
self.itemCombo = ttk.Combobox(self, width = 16, textvariable = varItems)
self.itemCombo.bind("<Return>", self.itemCombo_onEnter)
self.itemCombo.bind('<<ComboboxSelected>>',self.itemCombo_onEnter)
self.itemCombo['values'] = [l.strip() for l in listFile.readlines()]
self.itemCombo.pack()
self.blank = Label(self,text='').pack()

"""I want to pass the value selected in the combobox to the crawl_region() function when pushing Run"""

self.RunButton = Button(self, text="Run",command = crawl_site.crawl_region(region))
self.RunButton.pack()

def itemCombo_onEnter(self,event):
varItems.set(varItems.get().lower().strip())
mytext = varItems.get().strip()
vals = self.itemCombo.cget('values')
self.itemCombo.select_range(0,END)
print(mytext)
region = mytext

"""I want to pass mytext to the function called when pushing Run"""

if not vals:
self.itemCombo.configure(values = (mytext,))
elif mytext not in vals:
with open('regions1.txt', 'w') as f:
self.itemCombo.configure(values=vals + (mytext,))
f.write("\n".join(vals + (mytext,)))
f.close()
return 'break'

app = MainWindow(root)
root.mainloop()

调用的示例函数(crawl_site.crawl_region()):

class crawl_site():
def crawl_region(region):
print('passed region '+ str(region))

立即返回传递的区域[],但是当我进行选择或按“运行”按钮时没有任何反应。

最佳答案

尝试下面的代码。我创建了一个类属性 self.mytext,该属性在输入组合按钮 itemCombo_onEnter 时设置。当按下按钮时,将调用 onRunButton 函数。如果已设置 self.mytext,它将以 self.mytext 作为参数调用 crawl_region 函数。

from tkinter import *
from tkinter import ttk
from URL_Generator import crawl_site

listFile = open('regions1.txt','r')

root = Tk()
root.configure()
varItems = StringVar(root, value='')

class MainWindow(Frame):
def __init__(self,master = None):
Frame.__init__(self,master)
self.master = master
self.grid()
self.create_widgets()

def create_widgets(self):
"""Create Window Layout"""
self.label = Label(self, text="List Items").pack()
self.itemCombo = ttk.Combobox(self, width = 16, textvariable = varItems)
self.itemCombo.bind("<Return>", self.itemCombo_onEnter)
self.itemCombo.bind('<<ComboboxSelected>>',self.itemCombo_onEnter)
self.itemCombo['values'] = [l.strip() for l in listFile.readlines()]
self.itemCombo.pack()
self.blank = Label(self,text='').pack()

"""I want to pass the value selected in the combobox to the crawl_region() function when pushing Run"""

self.RunButton = Button(self, text="Run",command = self.onRunButton)
self.RunButton.pack()

def onRunButton(self):
if self.mytext:
crawl_site.crawl_region(self.mytext)

def itemCombo_onEnter(self,event):
varItems.set(varItems.get().lower().strip())
mytext = varItems.get().strip()
vals = self.itemCombo.cget('values')
self.itemCombo.select_range(0,END)
print(mytext)

self.mytext = mytext
"""I want to pass mytext to the function called when pushing Run"""

if not vals:
self.itemCombo.configure(values = (mytext,))
elif mytext not in vals:
with open('regions1.txt', 'w') as f:
self.itemCombo.configure(values=vals + (mytext,))
f.write("\n".join(vals + (mytext,)))
f.close()
return 'break'

app = MainWindow(root)
root.mainloop()

由于这一行,您的代码无法工作

self.RunButton = Button(self, text="Run",command = crawl_site.crawl_region(region))

这会立即调用方法crawl_region,并将区域作为参数,并尝试将按钮的回调设置为该方法的结果。

在不创建另一个函数的情况下“解决”问题的另一种方法是使用 lambda,但我认为我的方法更具可读性。

关于python - 将变量从组合框传递到被调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46346444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com