鱼C论坛

 找回密码
 立即注册
查看: 387|回复: 16

[Python] 一个关于python tkinter的关闭进程及返回值问题

[复制链接]
发表于 2024-1-29 19:51:59 | 显示全部楼层 |阅读模式
20鱼币
我在写一个程序的时候遇到了一些问题

我的工作文件夹是这样的:
-- main.py
-- login.py

在main.py中有一个函数检查输入的账号密码是否正确,然后需要启动一个tkinter界面

在login.py中有一个函数启动tkinter界面,之后等待用户输入密码  输入后结束这个tkinter界面并且返回账号密码与main.py



但是我在实际的编写中发现使用return返回结果后并不能关闭这个窗口  之后使用 destroy() quit() 以及 exit() 都无法关闭这个tkinter窗口  在手动关闭后main.py显示返回值是None


一下是简略的代码内容

main.py
  1. from login import login

  2. def jianyan(a, b):
  3.     pass


  4. text = login()
  5. jianyan(text[0], text[1])
复制代码


login.py
  1. def login():

  2.     def Exit_():
  3.         return var1, var2
  4.         exit()

  5.     var1 = '用户'
  6.     var2 = '密码'



  7.     Button(text="登陆", command = Exit_())
复制代码


这种情况需要怎么办来请教一下各位大佬


说明一下 : 在login之后需要tkinter界面   在main也需要  这就是为什么一定要把login的界面quit掉

最佳答案

查看完整内容

对于上面的代码(由人造人提供),我点击login按钮后tkinter窗口不关闭 但是如果将ttk.Button(root, text = 'login', command = root.quit).grid()改为ttk.Button(root, text = 'login', command = root.destroy).grid(),点击login按钮后窗口就关闭了 但是我不确定你的main.py会不会报错,希望这能够见效
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-29 19:52:00 | 显示全部楼层
本帖最后由 smallwh 于 2024-2-9 09:17 编辑
  1. from tkinter import Tk, ttk
  2. import tkinter

  3. def login():
  4.     root = Tk()
  5.     root.geometry('640x480')
  6.     ttk.Label(root, text = 'user').grid()
  7.     ttk.Label(root, text = 'passwd').grid()
  8.     user = tkinter.StringVar()
  9.     password = tkinter.StringVar()
  10.     ttk.Entry(root, textvariable = user).grid()
  11.     ttk.Entry(root, textvariable = password, show = '*').grid()
  12.     ttk.Button(root, text = 'login', command = root.quit).grid()
  13.     root.mainloop()
  14.     return (user.get(), password.get())

  15. if __name__ == '__main__':
  16.     text = login()
  17.     print(text)
复制代码

对于上面的代码(由人造人提供),我点击login按钮后tkinter窗口不关闭
但是如果将ttk.Button(root, text = 'login', command = root.quit).grid()改为ttk.Button(root, text = 'login', command = root.destroy).grid(),点击login按钮后窗口就关闭了
删除tkinter窗口.gif
但是我不确定你的main.py会不会报错,希望这能够见效
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-1-29 19:52:46 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-29 20:05:37 | 显示全部楼层
来了,我看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-29 20:14:49 | 显示全部楼层
本帖最后由 liuhongrun2022 于 2024-1-29 20:17 编辑

括号去了

Button(text="登陆", command = Exit_)

如果你要传参,可以

Button(text="登陆", command = lambda: Exit_(参数))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-29 20:18:52 | 显示全部楼层
liuhongrun2022 发表于 2024-1-29 20:14
括号去了

Button(text="登陆", command = Exit_)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-29 20:20:00 | 显示全部楼层

想什么呢,没抄你的,这么简单的问题也没必要
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-29 20:21:11 | 显示全部楼层
liuhongrun2022 发表于 2024-1-29 20:20
想什么呢,没抄你的,这么简单的问题也没必要

看在你互助团队有希望的份上,我就删了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-29 20:22:27 | 显示全部楼层
陶远航 发表于 2024-1-29 20:21
看在你互助团队有希望的份上,我就删了吧

好人一生平安
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-29 20:37:32 | 显示全部楼层
刚学tkinter,布局还没整明白,自己布局吧
用英文单词是因为中文还乱码,^_^

  1. #!/usr/bin/env python
  2. #coding=utf-8

  3. from tkinter import Tk, ttk
  4. import tkinter

  5. def login():
  6.     root = Tk()
  7.     root.geometry('640x480')
  8.     ttk.Label(root, text = 'user').grid()
  9.     ttk.Label(root, text = 'passwd').grid()
  10.     user = tkinter.StringVar()
  11.     password = tkinter.StringVar()
  12.     ttk.Entry(root, textvariable = user).grid()
  13.     ttk.Entry(root, textvariable = password, show = '*').grid()
  14.     ttk.Button(root, text = 'login', command = root.quit).grid()
  15.     root.mainloop()
  16.     return (user.get(), password.get())

  17. text = login()
  18. print(text)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-1-29 22:16:54 | 显示全部楼层
人造人 发表于 2024-1-29 17:37
刚学tkinter,布局还没整明白,自己布局吧
用英文单词是因为中文还乱码,^_^

大佬能帮我看看这个吗?
我把main函数注释掉了按照大佬这个方法能成功


但是不注释的话就会报错

  1. Exception in thread T2:
  2. Traceback (most recent call last):
  3.   File "C:\Users\Qin_\AppData\Local\Programs\Python\Python312\Lib\threading.py", line 1052, in _bootstrap_inner
  4.     self.run()
  5.   File "C:\Users\Qin_\AppData\Local\Programs\Python\Python312\Lib\threading.py", line 989, in run
  6.     self._target(*self._args, **self._kwargs)
  7.   File "c:\Users\Qin_\Desktop\Program\在线聊天室\Version 4.0(春节特供版)\client.py", line 77, in fasong
  8.     re_data = send_entry.get("1.0", END)[:-1]
  9.               ^^^^^^^^^^^^^^
  10. AttributeError: 'NoneType' object has no attribute 'get'
  11. Traceback (most recent call last):
  12.   File "c:\Users\Qin_\Desktop\Program\在线聊天室\Version 4.0(春节特供版)\client.py", line 603, in <module>
  13.     loginSendToServer(loginfuc1, loginfuc2)
  14.   File "c:\Users\Qin_\Desktop\Program\在线聊天室\Version 4.0(春节特供版)\client.py", line 56, in loginSendToServer
  15.     main()
  16.   File "c:\Users\Qin_\Desktop\Program\在线聊天室\Version 4.0(春节特供版)\client.py", line 497, in main
  17.     image_button = Button(centerFrame, image=photo, bootstyle="info-outline", command=sendImage)
  18.                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  19.   File "C:\Users\Qin_\AppData\Local\Programs\Python\Python312\Lib\site-packages\ttkbootstrap\style.py", line 4941, in __init__
  20.     func(self, *args, **kwargs)
  21.   File "C:\Users\Qin_\AppData\Local\Programs\Python\Python312\Lib\tkinter\ttk.py", line 582, in __init__
  22.     Widget.__init__(self, master, "ttk::button", kw)
  23.   File "C:\Users\Qin_\AppData\Local\Programs\Python\Python312\Lib\tkinter\ttk.py", line 527, in __init__
  24.     tkinter.Widget.__init__(self, master, widgetname, kw=kw)
  25.   File "C:\Users\Qin_\AppData\Local\Programs\Python\Python312\Lib\tkinter\__init__.py", line 2629, in __init__
  26.     self.tk.call(
  27. _tkinter.TclError: image "pyimage9" doesn't exist
复制代码



第一个报错不用管,没事

但是后面那个报错   我图片什么在之前都能够正常用  现在就报错了

用绝对路径也不行

  1.     """------------------------------发送框-------------------------------------------"""
  2.     send_entry = Text(centerFrame, width=55, height=4, font=("微软雅黑", 13)) # 发送区域
  3.     send_entry.place(x=10, y=460)


  4.     send_button = Button(centerFrame, text="\n发 送\n", command=fasong_Init)     # 发送按钮
  5.     send_button.place(x=585, y=460)

  6.     phtotICON = Image.open(r"C:\Users\Qin_\Desktop\Program\在线聊天室\Version 4.0(春节特供版)\log\image1.png")
  7.     photowidth, photoheight = phtotICON.size
  8.     photonew_width = int(photowidth * 0.06)  # 调整宽度为原始宽度的50%
  9.     photonew_height = int(photoheight * 0.06)  # 调整高度为原始高度的50%
  10.     photoimage = phtotICON.resize((photonew_width, photonew_height))  # 调整图像大小
  11.     photo = ImageTk.PhotoImage(photoimage)

  12.     image_button = Button(centerFrame, image=photo, bootstyle="info-outline", command=sendImage)
  13.     image_button.place(x=575, y=530)

  14.     phtotICON1 = Image.open(r"./log\设置_setting-three.png")
  15.     photowidth1, photoheight1 = phtotICON1.size
  16.     photonew_width1 = int(photowidth1 * 0.06)  # 调整宽度为原始宽度的50%
  17.     photonew_height1 = int(photoheight1 * 0.06)  # 调整高度为原始高度的50%
  18.     photoimage1 = phtotICON1.resize((photonew_width1, photonew_height1))  # 调整图像大小
  19.     photo1 = ImageTk.PhotoImage(photoimage1)

  20.     settingButton = Button(centerFrame, image=photo1, bootstyle="info-outline", command=SystemSetting)
  21.     settingButton.place(x=613, y=530)


  22.     send_entry.bind("<Return>", fasong_Init)
  23.     send_entry.bind("<Control-Return>", insert_newline)
  24.     """------------------------------发送框-------------------------------------------"""
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-30 15:04:54 | 显示全部楼层
Mike_python小 发表于 2024-1-29 22:16
大佬能帮我看看这个吗?
我把main函数注释掉了按照大佬这个方法能成功

把你这代码精简一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-1-30 17:46:30 | 显示全部楼层
人造人 发表于 2024-1-30 12:04
把你这代码精简一下

主要就是第10行他报错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-1-30 17:53:07 | 显示全部楼层
人造人 发表于 2024-1-30 12:04
把你这代码精简一下

找到问题了,login.py中用quit方法没法关闭窗口 导致有两个tkinter窗口  请问怎么关闭呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-30 18:05:14 | 显示全部楼层
人造人 发表于 2024-1-29 20:37
刚学tkinter,布局还没整明白,自己布局吧
用英文单词是因为中文还乱码,^_^

调用Tk类生成的对象中的那个quit函数
ttk.Button(root, text = 'login', command = root.quit).grid()
像这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-2-1 11:25:16 | 显示全部楼层
本帖最后由 学C的h 于 2024-2-1 11:26 编辑


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-2-1 17:27:48 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-9 13:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表