通过cx_freeze将tkinter/selenium应用程序转换为.exe;控制台问题



我需要cx_freeze的帮助,但它也意味着一些tkinter(和selenium,但在失败时没有(。我正在积极搜索互联网,但这个边缘案例可能非常具体。我已经发布了我希望并认为是相关的部分,我不能发布所有内容,它很长,我必须进行足够的审查,才能成为一份全职工作一天。

问题如下:

当我在base="的windows上使用cx_ freeze编译时;Win32GUI";按下按钮时不会执行teststart模块的任何部分。如果我用base=None编译,一切都会正常工作。

cx_freeze文件:

from cx_Freeze import setup, Executable
executables = [Executable("gui.py", base="Win32GUI", target_name="TestingClient", icon=r".test2.ico")]
packages = ["selenium", "time", "tkinter", "json", "random", "sys", "threading", "functools", "datetime", "traceback",
"contextlib", "webdriver_manager.chrome"]
includes = ["test_start", "testing_lib", "__init__", "module_whose_name_i_need_to_censor", "another_one", "there's_a_bunch", "i_won't_name_them_all"]
files = [r".chromedriver.exe", r".temp", r".Logs"]
options = {
'build_exe': {
'packages': packages,
'includes': includes,
'include_files': files
},
}
setup(
name="Test",
options=options,
version="0.1",
description='Testing Client',
executables=executables
)

这是我用来编译程序的脚本。该程序是一个tkintergui,它调用一个启动测试的函数(通过json文件从ui中获得数据(。

我用一个按钮进行调用,该按钮调用函数start_click(notiz(,其中来自模块testrongtart的函数gui_data_init被称为

start_param = partial(start_click, notiz)
start_button = Button(buttonframe, text="Start", command=start_param)
def start_click(notiz):
# data generation happens here and is stuffed into a json file
thread = threading.Thread(target=test_start.gui_data_init, args=(jsonpath,))
thread.start()

testrongtart的(我认为(相关部分:

def gui_data_init(jsonpath):
form_data = testing_lib.form_input(jsonpath)
logn = form_data[0]  # Login Name
passw = form_data[1]  # Passwort
# There are many more of those, can't be looped properly some have conditions
testrun(list_of_input_data_for_the_test)

该函数调用来自模块testinglib的函数表单输入,其中数据是从创建的json文件导入的,该文件承载了大量使用selenium和许多其他东西的函数,以进一步简化特定测试的编写。函数testrun((从许多其他模块中调用许多其他函数,这些模块实际执行测试,具体取决于选择了哪些路径等。

正如我上面所说的,当我使用base=None进行编译时,一切都非常完美,并且UI之外还有一个控制台在运行。但是当我用base=";Win32GUI";为了隐藏窗口,按钮点击将执行函数start_click;testrongtart.guid_data_init";内部将不会执行。

为什么会这样?我如何摆脱控制台,仍然正确运行程序?我尝试了很多东西,但到目前为止没有发现任何效果。

显然,如果控制台被删除,直接输出到控制台(f.e.print(((将使程序无法运行。在这种特定情况下,它是打印到控制台的网络驱动程序管理器。我没能改变这一点,所以事情就是这样。

相关内容

  • 没有找到相关文章

最新更新