gpt4 book ai didi

python - 导入 tkinter 文件时我应该向 "root"传递什么参数?

转载 作者:太空宇宙 更新时间:2023-11-03 14:00:52 24 4
gpt4 key购买 nike

这可能是一个非常基本的问题,但我目前正在尝试用对 Python 知之甚少的东西来编写代码。

我正在编写一个脚本,该脚本将打开一个 GUI(在 PAGE 中设计,与 tkinter 配合使用)供用户输入多个输入。当他们单击“提交”时,代码会将输入的值存储为变量并销毁 GUI 窗口。此时,它开始运行 Selenium 脚本(在 Katalon IDE 中创建)来控制浏览器窗口,并开始使用输入中的信息来填充 Web 表单中的字段。

我的 tkinter 文件包含一个用于 GUI 的主文件,该文件输入一个支持文件,该文件定义按下按钮时会发生什么。现在,我将主 GUI tkinter 文件导入到 Selenium 脚本文件中,然后在文件底部运行以下命令:

if __name__ == "__main__":
SNinput.create_New_Toplevel(root)
unittest.main()

我传递 root 权限是因为我的主 tkinter 文件 (SNinput.py) 包含此函数:

def create_New_Toplevel(root, *args, **kwargs):
'''Starting point when module is imported by another program.'''
global w, w_win, rt
rt = root
w = Toplevel (root)
top = New_Toplevel (w)
SNinput_support.init(w, top, *args, **kwargs)
return (w, top)

当我运行 Selenium 文件时,我收到一个 TypeError,它缺少位置参数:“root”。我缺少什么?我应该向该函数传递什么?

或者,我是否应该颠倒此过程,因为我想先启动 GUI,然后再运行 Selenium 脚本?换句话说,将 Selenium 脚本(servicenow.py)导入到 SNinput.py 中,然后找到一种方法在我单击提交按钮时运行该文件?我没有这样做的原因是我没有找到将这些变量传递给被调用函数的方法。

编辑:我尝试过在 servicenow.py 文件中传递“tkinter”的几个变体来代替 root,但每次我都会收到名称未定义的错误。

在 servicenow.py 的顶部,我导入 GUI 模块:

import SNinput

在GUI模块SNinput.py中,初始导入和函数定义如下:

import sys

try:
from Tkinter import *
except ImportError:
from tkinter import *

try:
import ttk
py3 = False
except ImportError:
import tkinter.ttk as ttk
py3 = True

import SNinput_support

def vp_start_gui():
'''Starting point when module is the main routine.'''
global val, w, root
root = Tk()
top = New_Toplevel (root)
SNinput_support.init(root, top)
root.mainloop()

w = None
def create_New_Toplevel(root, *args, **kwargs):
'''Starting point when module is imported by another program.'''
global w, w_win, rt
rt = root
w = Toplevel (root)
top = New_Toplevel (w)
SNinput_support.init(w, top, *args, **kwargs)
return (w, top)

def destroy_New_Toplevel():
global w
w.destroy()
w = None

最佳答案

当以模块化方式编写时,哪个脚本驱动另一个脚本并不重要。我个人更喜欢让 GUI 导入其他脚本。

如果我们假设第一个代码片段缩进正确,并且它在某种程度上是整个脚本,那么错误是很自然的,因为 root 本身没有任何意义。必须首先为其分配一个对象才能使其有意义。

通过查看您的 create_New_Toplevel,您似乎应该传递 tkinter.Tk 类的实例。将“主”替换为:

if __name__ == "__main__":
import tkinter # replace with Tkinter if python 2.x
SNinput.create_New_Toplevel(tkinter.Tk())
unittest.main()

关于python - 导入 tkinter 文件时我应该向 "root"传递什么参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49247317/

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