鱼C论坛

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

关于定义两个button的函数,分别点击可以在同一个窗口上显示各个函数内容的问题

[复制链接]
发表于 2019-4-2 00:09:46 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 yysscc 于 2019-4-2 00:09 编辑

如题:我在tkinter中定义一个窗口,设置A button和B button,要求可以再A和B控制在此窗口上显示它们的函数内容。

错误:当我点击A button时,A的函数显示,但我继续点击B时,窗口不显示B的函数,只在Idle中显示。当先点击B button时也一样。

求大佬指出问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-4-2 07:22:48 | 显示全部楼层
贴代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-2 15:46:57 | 显示全部楼层
  1. root3 = Tk()
  2.         root3.title("销售系统 demo")
  3.         root3.geometry('900x600')
  4.         def buy():
  5.             group2 = LabelFrame(buttom,background='lightsteelblue',bd=2)
  6.             group2.pack(fill=BOTH,side='top')
  7.             group3 = LabelFrame(buttom,padx=5,pady=5,bd=2)
  8.             group3.pack(fill=BOTH,side='bottom')
  9.             label1 = Label(group2,text="用户:"+str(en1),font="黑体")
  10.             label1.grid(row=0,column=0,sticky=W,padx=10,pady=3)
  11.             label1 = Label(group2,text="                                        ")
  12.             label1.grid(row=0,column=1,sticky=W,padx=10,pady=3)
  13.             entry = Entry(group2)
  14.             entry.grid(row=0,column=2,padx=10,pady=3)
  15.             label1 = Label(group2,text="                                        ")
  16.             label1.grid(row=0,column=3,sticky=W,padx=10,pady=3)
  17.             button = Button(group2,text="press",width=10)
  18.             button.grid(row=0,column=4,padx=10,pady=3,stick=E,columnspan=4,ipadx=3)

  19.             db = pymysql.connect('localhost','root','root','medicine')
  20.             cur = db.cursor()
  21.             sql = 'select * from user'
  22.             cur.execute(sql)
  23.             user_x = []
  24.             user_y = []
  25.             results =   list(cur.fetchall())
  26.             for row in results:
  27.                 user_x.append(row[0])
  28.                 user_y.append(row[1])
  29.             data = np.array([user_x,user_y])
  30.             x = user_x[0:6]
  31.             y = user_y[0:6]
  32.             m = user_x[-2:]
  33.             n = user_y[-2:]
  34.             data1 = np.array([x+['...']+m,y+['...']+n])
  35.             df = DataFrame(data.T,columns=["账号","密码"])
  36.             matplotlib.use('TkAgg')
  37.             mpl.rcParams['font.sans-serif'] = ['SimHei']
  38.             f = plt.figure(figsize=(7.6,5.2))
  39.             a = f.add_subplot(111,frameon=False,xticks=[],yticks=[])
  40.             a.set_title("用户信息表",fontsize='xx-large')
  41.             p = df.index[-2]+1
  42.             q = df.index[-1]+1
  43.             table = plt.table(cellText=data1.T,colLabels=df.columns,rowLabels=['1','2','3','4','5','6','...']+[str(p),str(q)],colWidths=[0.1]*data.shape[1],loc='upper center',cellLoc='center')
  44.             table.set_fontsize(14)
  45.             table.scale(5,2.5)
  46.             canvas = FigureCanvasTkAgg(f, master=group3)
  47.             canvas.draw()
  48.             canvas.get_tk_widget().pack()
  49.         def sell():
  50.             group2 = LabelFrame(buttom,background='lightsteelblue',bd=2)
  51.             group2.pack(fill=BOTH,side='top')
  52.             group3 = LabelFrame(buttom,padx=5,pady=5,bd=2)
  53.             group3.pack(fill=BOTH,side='bottom')
  54.             label1 = Label(group2,text="用户:"+str(en1),font="黑体")
  55.             label1.grid(row=0,column=0,sticky=W,padx=10,pady=3)
  56.             label1 = Label(group2,text="                                        ")
  57.             label1.grid(row=0,column=1,sticky=W,padx=10,pady=3)
  58.             entry = Entry(group2)
  59.             entry.grid(row=0,column=2,padx=10,pady=3)
  60.             label1 = Label(group2,text="                                        ")
  61.             label1.grid(row=0,column=3,sticky=W,padx=10,pady=3)
  62.             button = Button(group2,text="press",width=10)
  63.             button.grid(row=0,column=4,padx=10,pady=3,stick=E,columnspan=4,ipadx=3)

  64.             db = pymysql.connect('localhost','root','root','medicine')
  65.             cur = db.cursor()
  66.             sql = 'select * from tb_purchase'
  67.             cur.execute(sql)
  68.             user_x = []
  69.             user_y = []
  70.             user_z = []
  71.             user_w = []
  72.             results =   list(cur.fetchall())
  73.             print(results)
  74.             for row in results:
  75.                 user_x.append(row[0])
  76.                 user_y.append(row[1])
  77.                 user_z.append(row[2])
  78.                 user_w.append(row[3])
  79.             x = user_x[0:6]
  80.             y = user_y[0:6]
  81.             z = user_z[0:6]
  82.             w = user_w[0:6]
  83.             m = user_x[-2:]
  84.             n = user_y[-2:]
  85.             p = user_z[-2:]
  86.             q = user_w[-2:]
  87.             data = np.array([user_x,user_y,user_z,user_w])
  88.             data1 = np.array([x+['...']+m,y+['...']+n,z+['...']+p,w+['...']+q])
  89.             df = DataFrame(data.T,columns=["药品","供应商","总销售额","增长"])
  90.             matplotlib.use('TkAgg')
  91.             mpl.rcParams['font.sans-serif'] = ['SimHei']
  92.             f = plt.figure(figsize=(7.6,5.2))
  93.             a = f.add_subplot(111,frameon=False,xticks=[],yticks=[])
  94.             a.set_title("销售信息表",loc='center',pad=10,fontsize='xx-large')
  95.             a = df.index[-2]+1
  96.             b = df.index[-1]+1
  97.             table = plt.table(cellText=data1.T,colLabels=df.columns,rowLabels=['1','2','3','4','5','6','...']+[str(a),str(b)],colWidths=[0.1]*data.shape[1],loc='upper center',cellLoc='center')
  98.             table.set_fontsize(14)
  99.             table.scale(3,2.5)
  100.             canvas = FigureCanvasTkAgg(f, master=group3)
  101.             canvas.draw()
  102.             canvas.get_tk_widget().pack()
  103.         def maneage():
  104.             pass
  105.         def user():
  106.             pass
  107.         root3.resizable(width=False,height=False)

  108.         m1 = PanedWindow(root3,showhandle=False, sashrelief=SUNKEN)
  109.         m1.pack(fill=BOTH, expand=1)
  110.         #m1.sash_coord(100,0)
  111.         group1 = LabelFrame(m1,padx=5,pady=5,background='lightsteelblue')
  112.         group1.pack(padx=5,pady=5)
  113.         LANGS = [
  114.             ("采购部",1),("库管部",2),("销售部",3),("用户部",4)]
  115.         v = IntVar()
  116.         for lang,num in LANGS:
  117.             if num == 1:
  118.                 temp = buy
  119.             elif num == 2:
  120.                 temp = sell
  121.             elif num == 3:
  122.                 temp = maneage
  123.             else:
  124.                 temp = user
  125.             b = Radiobutton(group1,text=lang,variable=v,value=num,indicatoron=False,width=15,command=temp,background='lightgreen',padx=5,pady=4)
  126.             b.pack(fill=BOTH)
  127.         m1.add(group1)

  128.         m2 = PanedWindow(root3,orient=VERTICAL, showhandle=False, sashrelief=SUNKEN)
  129.         m1.add(m2)
  130.         top = Label(m2, text="Welcome To Our Medicine Invoicing System",font=("华文宋体",20),height=4,background='lightsteelblue')
  131.         m2.add(top)
  132.         buttom = Label(m2,padx=5,pady=5)
  133.         m2.add(buttom)
  134.         root3.mainloop()
复制代码


截取这部分的完整代码。分别用采购部和库管部两个按钮控制buy函数和sell函数显示在group3窗口上,
如题,不能顺利显示。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-2 15:49:29 | 显示全部楼层

忘了删空格了,第一行不在一起,见谅
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-2 16:20:12 | 显示全部楼层
没看到你给按钮指定方法啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-2 18:45:04 | 显示全部楼层
塔利班 发表于 2019-4-2 16:20
没看到你给按钮指定方法啊

在128行,Radiobutton中指定了command=temp,根据采购部、销售部这些按钮中的num不同,temp可以取不同的def
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-15 00:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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