一个关于python tkinter的关闭进程及返回值问题
我在写一个程序的时候遇到了一些问题我的工作文件夹是这样的:
-- main.py
-- login.py
在main.py中有一个函数检查输入的账号密码是否正确,然后需要启动一个tkinter界面
在login.py中有一个函数启动tkinter界面,之后等待用户输入密码输入后结束这个tkinter界面并且返回账号密码与main.py
但是我在实际的编写中发现使用return返回结果后并不能关闭这个窗口之后使用 destroy() quit() 以及 exit() 都无法关闭这个tkinter窗口在手动关闭后main.py显示返回值是None
一下是简略的代码内容
main.py
from login import login
def jianyan(a, b):
pass
text = login()
jianyan(text, text)
login.py
def login():
def Exit_():
return var1, var2
exit()
var1 = '用户'
var2 = '密码'
Button(text="登陆", command = Exit_())
这种情况需要怎么办来请教一下各位大佬
说明一下 : 在login之后需要tkinter界面 在main也需要这就是为什么一定要把login的界面quit掉 本帖最后由 smallwh 于 2024-2-9 09:17 编辑
from tkinter import Tk, ttk
import tkinter
def login():
root = Tk()
root.geometry('640x480')
ttk.Label(root, text = 'user').grid()
ttk.Label(root, text = 'passwd').grid()
user = tkinter.StringVar()
password = tkinter.StringVar()
ttk.Entry(root, textvariable = user).grid()
ttk.Entry(root, textvariable = password, show = '*').grid()
ttk.Button(root, text = 'login', command = root.quit).grid()
root.mainloop()
return (user.get(), password.get())
if __name__ == '__main__':
text = login()
print(text)
对于上面的代码(由人造人提供),我点击login按钮后tkinter窗口不关闭
但是如果将ttk.Button(root, text = 'login', command = root.quit).grid()改为ttk.Button(root, text = 'login', command = root.destroy).grid(),点击login按钮后窗口就关闭了
但是我不确定你的main.py会不会报错,希望这能够见效 @额外减小 @tommyyu @liuhongrun2022 @陶远航 @人造人
求解答{:10_254:}{:10_254:}{:10_254:} 来了,我看看 本帖最后由 liuhongrun2022 于 2024-1-29 20:17 编辑
括号去了
Button(text="登陆", command = Exit_)
如果你要传参,可以
Button(text="登陆", command = lambda: Exit_(参数)) liuhongrun2022 发表于 2024-1-29 20:14
括号去了
Button(text="登陆", command = Exit_)
{:10_295:} 陶远航 发表于 2024-1-29 20:18
想什么呢,没抄你的,这么简单的问题也没必要{:10_277:} liuhongrun2022 发表于 2024-1-29 20:20
想什么呢,没抄你的,这么简单的问题也没必要
看在你互助团队有希望的份上,我就删了吧{:10_256:} 陶远航 发表于 2024-1-29 20:21
看在你互助团队有希望的份上,我就删了吧
好人一生平安{:5_110:} 刚学tkinter,布局还没整明白,自己布局吧
用英文单词是因为中文还乱码,^_^
#!/usr/bin/env python
#coding=utf-8
from tkinter import Tk, ttk
import tkinter
def login():
root = Tk()
root.geometry('640x480')
ttk.Label(root, text = 'user').grid()
ttk.Label(root, text = 'passwd').grid()
user = tkinter.StringVar()
password = tkinter.StringVar()
ttk.Entry(root, textvariable = user).grid()
ttk.Entry(root, textvariable = password, show = '*').grid()
ttk.Button(root, text = 'login', command = root.quit).grid()
root.mainloop()
return (user.get(), password.get())
text = login()
print(text)
人造人 发表于 2024-1-29 17:37
刚学tkinter,布局还没整明白,自己布局吧
用英文单词是因为中文还乱码,^_^
大佬能帮我看看这个吗?
我把main函数注释掉了按照大佬这个方法能成功
但是不注释的话就会报错
Exception in thread T2:
Traceback (most recent call last):
File "C:\Users\Qin_\AppData\Local\Programs\Python\Python312\Lib\threading.py", line 1052, in _bootstrap_inner
self.run()
File "C:\Users\Qin_\AppData\Local\Programs\Python\Python312\Lib\threading.py", line 989, in run
self._target(*self._args, **self._kwargs)
File "c:\Users\Qin_\Desktop\Program\在线聊天室\Version 4.0(春节特供版)\client.py", line 77, in fasong
re_data = send_entry.get("1.0", END)[:-1]
^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'get'
Traceback (most recent call last):
File "c:\Users\Qin_\Desktop\Program\在线聊天室\Version 4.0(春节特供版)\client.py", line 603, in <module>
loginSendToServer(loginfuc1, loginfuc2)
File "c:\Users\Qin_\Desktop\Program\在线聊天室\Version 4.0(春节特供版)\client.py", line 56, in loginSendToServer
main()
File "c:\Users\Qin_\Desktop\Program\在线聊天室\Version 4.0(春节特供版)\client.py", line 497, in main
image_button = Button(centerFrame, image=photo, bootstyle="info-outline", command=sendImage)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Qin_\AppData\Local\Programs\Python\Python312\Lib\site-packages\ttkbootstrap\style.py", line 4941, in __init__
func(self, *args, **kwargs)
File "C:\Users\Qin_\AppData\Local\Programs\Python\Python312\Lib\tkinter\ttk.py", line 582, in __init__
Widget.__init__(self, master, "ttk::button", kw)
File "C:\Users\Qin_\AppData\Local\Programs\Python\Python312\Lib\tkinter\ttk.py", line 527, in __init__
tkinter.Widget.__init__(self, master, widgetname, kw=kw)
File "C:\Users\Qin_\AppData\Local\Programs\Python\Python312\Lib\tkinter\__init__.py", line 2629, in __init__
self.tk.call(
_tkinter.TclError: image "pyimage9" doesn't exist
第一个报错不用管,没事
但是后面那个报错 我图片什么在之前都能够正常用现在就报错了
用绝对路径也不行
"""------------------------------发送框-------------------------------------------"""
send_entry = Text(centerFrame, width=55, height=4, font=("微软雅黑", 13)) # 发送区域
send_entry.place(x=10, y=460)
send_button = Button(centerFrame, text="\n发 送\n", command=fasong_Init) # 发送按钮
send_button.place(x=585, y=460)
phtotICON = Image.open(r"C:\Users\Qin_\Desktop\Program\在线聊天室\Version 4.0(春节特供版)\log\image1.png")
photowidth, photoheight = phtotICON.size
photonew_width = int(photowidth * 0.06)# 调整宽度为原始宽度的50%
photonew_height = int(photoheight * 0.06)# 调整高度为原始高度的50%
photoimage = phtotICON.resize((photonew_width, photonew_height))# 调整图像大小
photo = ImageTk.PhotoImage(photoimage)
image_button = Button(centerFrame, image=photo, bootstyle="info-outline", command=sendImage)
image_button.place(x=575, y=530)
phtotICON1 = Image.open(r"./log\设置_setting-three.png")
photowidth1, photoheight1 = phtotICON1.size
photonew_width1 = int(photowidth1 * 0.06)# 调整宽度为原始宽度的50%
photonew_height1 = int(photoheight1 * 0.06)# 调整高度为原始高度的50%
photoimage1 = phtotICON1.resize((photonew_width1, photonew_height1))# 调整图像大小
photo1 = ImageTk.PhotoImage(photoimage1)
settingButton = Button(centerFrame, image=photo1, bootstyle="info-outline", command=SystemSetting)
settingButton.place(x=613, y=530)
send_entry.bind("<Return>", fasong_Init)
send_entry.bind("<Control-Return>", insert_newline)
"""------------------------------发送框-------------------------------------------""" Mike_python小 发表于 2024-1-29 22:16
大佬能帮我看看这个吗?
我把main函数注释掉了按照大佬这个方法能成功
把你这代码精简一下
人造人 发表于 2024-1-30 12:04
把你这代码精简一下
主要就是第10行他报错了 人造人 发表于 2024-1-30 12:04
把你这代码精简一下
找到问题了,login.py中用quit方法没法关闭窗口 导致有两个tkinter窗口请问怎么关闭呢?
人造人 发表于 2024-1-29 20:37
刚学tkinter,布局还没整明白,自己布局吧
用英文单词是因为中文还乱码,^_^
调用Tk类生成的对象中的那个quit函数
ttk.Button(root, text = 'login', command = root.quit).grid()
像这样
本帖最后由 学C的h 于 2024-2-1 11:26 编辑
学C的h 发表于 2024-2-1 11:25
?
页:
[1]