鱼C论坛

 找回密码
 立即注册
查看: 2346|回复: 5

python tk 窗口中的返回值问题

[复制链接]
发表于 2017-12-7 00:18:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 aboluo31 于 2017-12-7 00:20 编辑

求助大神赐教
       我想做的是:通过弹出的对话框,替换程序中的一个值。
       问题1、使用input()可以完成,但是现在想实现的在弹出的窗口中替换原值。总是不成功,不知道什么原因。
       问题2、并且程序为什么不等我 i[2]=hand_operation(i[0],i[1],i[2])  执行完,就已经往下执行了
       论坛图片一直传不上来,表达的可能不够清楚,麻烦大家看看下面的代码
import tkinter as tk
import os
import string
import math
from tkinter import *
from tkinter import messagebox

def hand_operation(x,y,hole):
    def huan_hole():
        nh = float(new_hole.get())
        print(nh)
        tk.messagebox.showinfo('ok!', '你已经成功替换!')
        window_1.destroy()
        return nh
    window_1 = tk.Toplevel(window)
    window_1.geometry('400x100')
    window_1.title('手动')

    var = tk.StringVar()
    #var.set('抱歉,没有找到' +str(hole)+ '对应的冲头,请在下面输入代替孔径:')
    var.set('抱歉'+'('+str(x)+','+str(y)+')'+'处孔径为'+str(hole)+'冲头没有找到.请输入'+str(hole)+'的代替冲头!'+':')
    tk.Label(window_1, textvariable=var, height=1).place(x=10, y=10)

    new_hole = tk.StringVar()
    new_hole.set('9')
    entry_new_hole = tk.Entry(window_1, textvariable=new_hole, show=None, width=12)
    entry_new_hole.place(x=10, y=40)
    btn_comfirm = tk.Button(window_1, text='确认替换', command=huan_hole)
    btn_comfirm.place(x=10, y=70)
  
def generate():
    data=[[100,50,9],[100,80,9.5]]            
    for i in data:
        if i[2]==9:
            i[0]=i[0]+10
        elif not(i[2]==9):
            #i[2]=input('抱歉'+str(i[2])+'头没有找到.请输入'+str(i[2])+'的代替冲头!'+':')
            i[2]=hand_operation(i[0],i[1],i[2])   #我以为此处会得到i【2】=9,实际总是在此处报错,使用input方法可以实现
            print('*'+str(i[2]))
            if i[2]==9:
                i[0]=i[0]+9
            continue
            os._exit(0)            
window=tk.Tk()
window.title('测试')
window.geometry('250x200')

group=tk.LabelFrame(window,text="请输入数控程序名",padx=30,pady=5)
group.pack(padx=10,pady=10)
Newcode_name=[("上:",0,0),
              ("下:",1,0),]
for name,num,num1 in Newcode_name:
    newcode_name=tk.Label(group, text=name).grid(row=num,column=num1)

d_l = tk.StringVar()
d_r = tk.StringVar()
d_l=tk.Entry(group,textvariable=d_l,show=None,width=10)
d_l.grid(row=0,column=1,padx=10,pady=5)
d_r=tk.Entry(group,textvariable=d_r,show=None,width=10)
d_r.grid(row=1,column=1,padx=10,pady=5)
tk.Button(window,text='执行',width=10,height=1,command=generate).place(x=50,y=130)
tk.Button(window,text='退出',width=10,height=1,command=window.quit).place(x=150,y=130)

window.mainloop()
QQ图片20171207001342.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-12-7 00:22:19 | 显示全部楼层
图片终于传上来了,运行顺序就是通过 执行--手动(窗口)--确认替换后,希望文本框里面的9能返回给i【2】
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-7 07:39:03 | 显示全部楼层
本帖最后由 老忘 于 2017-12-7 08:17 编辑

我觉得是hand_operation没有返回值

  1. ......
  2. def hand_operation(x,y,hole):
  3.     ......
  4.     ......
  5.     return float(new_hole.get())
复制代码


下次发代码记得要用代码格式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-7 08:55:39 | 显示全部楼层
不对不对,好象还不是返回值的问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-7 09:56:50 From FishC Mobile | 显示全部楼层
老忘 发表于 2017-12-7 08:55
不对不对,好象还不是返回值的问题

感觉程序并没有等我hand_operation()调用完,就往下执行下一句了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-7 13:30:48 | 显示全部楼层
是的,先打印的有*的,可能思考用全局变量或改成用类来实现这二种方式试试看行不行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-26 08:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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