鱼C论坛

 找回密码
 立即注册
查看: 2069|回复: 7

[已解决]第二个代码页面为什么会显示 self.db = Db() NameError: name 'Db' is not defined

[复制链接]
发表于 2019-4-18 19:37:41 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 喵兜兜 于 2019-4-18 19:43 编辑
  1. from tkinter import *
  2. from tkinter.messagebox import *
  3. from MainPage import *
  4. from buildPage import *
  5. from db import *


  6. class LoginPage():
  7.         def __init__(self, master=None):
  8.                 self.root = master #定义内部变量root
  9.                 self.root.geometry('%dx%d' % (300, 180)) #设置窗口大小
  10.                 self.username = StringVar()
  11.                 self.password = StringVar()
  12.                 self.createPage()

  13.         def createPage(self):
  14.                 self.page = Frame(self.root) #创建Frame
  15.                 self.page.pack()
  16.                 Label(self.page).grid(row=0, stick=W)
  17.                 Label(self.page, text = '账户: ').grid(row=1, stick=W, pady=10)
  18.                 Entry(self.page, textvariable=self.username).grid(row=1, column=1, stick=E)
  19.                 Label(self.page, text = '密码: ').grid(row=2, stick=W, pady=10)
  20.                 Entry(self.page, textvariable=self.password, show='*').grid(row=2, column=1, stick=E)
  21.                 Button(self.page, text='登陆', command=self.loginCheck).grid(row=3,column=1, stick=E)
  22.                 Button(self.page, text='注册管理人员',command=self.build).grid(row=3, stick=W, pady=10)

  23.         def loginCheck(self):
  24.                 self.db = Db()
  25.                 rel = self.db.Login(self.username.get(),self.password.get())
  26.                 if rel == 1:
  27.                         self.page.forget()
  28.                         MainPage(self.root)
  29.                 else :
  30.                         showinfo(title='错误', message='请重新输入!')
  31.                
  32.         def build(self):
  33.                 self.page.forget()
  34.                 buildPage(self.root)
  35.        

  36.                
  37.                
复制代码



  1. from tkinter import *
  2. from tkinter.messagebox import *
  3. from RloginPage import *
  4. from db import *

  5. class buildPage():
  6.         def __init__(self, master=None):
  7.                 self.root = master #定义内部变量root
  8.                 self.root.geometry('%dx%d' % (300, 200)) #设置窗口大小
  9.                 self.username = StringVar()
  10.                 self.fpassword = StringVar()
  11.                 self.spassword = StringVar()
  12.                 self.createPage()
  13.                
  14.         def createPage(self):
  15.                 self.page = Frame(self.root) #创建Frame
  16.                 self.page.pack()
  17.                 Label(self.page).grid(row=0, stick=W)
  18.                 Label(self.page, text = '账    号: ').grid(row=1, stick=W, pady=10)
  19.                 Entry(self.page, textvariable=self.username).grid(row=1, column=1, stick=E)
  20.                 Label(self.page, text = '密    码: ').grid(row=2, stick=W, pady=10)
  21.                 Entry(self.page, textvariable=self.fpassword, show='*').grid(row=2, column=1, stick=E)
  22.                 Label(self.page, text = '确认密码: ').grid(row=3, stick=W, pady=10)
  23.                 Entry(self.page, textvariable=self.spassword, show='*').grid(row=3, column=1, stick=E)
  24.                 Button(self.page, text='确认', command=self.Build).grid(row=4,column=1, stick=E)
  25.        
  26.         def Build(self):
  27.                 password1 = self.fpassword.get()
  28.                 password2 = self.spassword.get()
  29.                 self.db = Db()
  30.                 rel = self.db.AddAdmin(self.username.get(),self.fpassword.get())
  31.                 if rel == 1:
  32.                         self.page.forget()
  33.                         RloginPage(self.root)
  34.                 else :
  35.                         showinfo(title='失败', message='请重新注册!')
  36.                                                         
  37.        
复制代码

运行整个程序的时候,第一个代码没出现问题,到了第二个代码就提示   
self.db = Db()
NameError: name 'Db' is not defined

有没有什么办法解决?百度了老半天,束手无策呀。
顺便问一下,悬赏赏金设置的在什么地方,找半天没看到呀0.0想加急悬赏
最佳答案
2019-4-18 22:37:51
这个应该是导包上的问题,为什么你自己定义的模块都用用import * 的,没有封装成类还是设置文件?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-4-18 19:39:43 | 显示全部楼层
  1. from tkinter import *
  2. from tkinter.messagebox import *
  3. from RloginPage import *
  4. from db import *

  5. class buildPage():
  6.         def __init__(self, master=None):
  7.                 self.root = master #定义内部变量root
  8.                 self.root.geometry('%dx%d' % (300, 200)) #设置窗口大小
  9.                 self.username = StringVar()
  10.                 self.fpassword = StringVar()
  11.                 self.spassword = StringVar()
  12.                 self.createPage()
  13.                
  14.         def createPage(self):
  15.                 self.page = Frame(self.root) #创建Frame
  16.                 self.page.pack()
  17.                 Label(self.page).grid(row=0, stick=W)
  18.                 Label(self.page, text = '账    号: ').grid(row=1, stick=W, pady=10)
  19.                 Entry(self.page, textvariable=self.username).grid(row=1, column=1, stick=E)
  20.                 Label(self.page, text = '密    码: ').grid(row=2, stick=W, pady=10)
  21.                 Entry(self.page, textvariable=self.fpassword, show='*').grid(row=2, column=1, stick=E)
  22.                 Label(self.page, text = '确认密码: ').grid(row=3, stick=W, pady=10)
  23.                 Entry(self.page, textvariable=self.spassword, show='*').grid(row=3, column=1, stick=E)
  24.                 Button(self.page, text='确认', command=self.Build).grid(row=4,column=1, stick=E)
  25.        
  26.         def Build(self):
  27.                 password1 = self.fpassword.get()
  28.                 password2 = self.spassword.get()
  29.                 self.db = Db()
  30.                 rel = self.db.AddAdmin(self.username.get(),self.fpassword.get())
  31.                 if rel == 1:
  32.                         self.page.forget()
  33.                         RloginPage(self.root)
  34.                 else :
  35.                         showinfo(title='失败', message='请重新注册!')
  36.                                                         
  37.        
复制代码


这是出问题的代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-18 19:40:21 | 显示全部楼层
  1. from tkinter import *
  2. from tkinter.messagebox import *
  3. from MainPage import *
  4. from buildPage import *
  5. from db import *


  6. class LoginPage():
  7.         def __init__(self, master=None):
  8.                 self.root = master #定义内部变量root
  9.                 self.root.geometry('%dx%d' % (300, 180)) #设置窗口大小
  10.                 self.username = StringVar()
  11.                 self.password = StringVar()
  12.                 self.createPage()

  13.         def createPage(self):
  14.                 self.page = Frame(self.root) #创建Frame
  15.                 self.page.pack()
  16.                 Label(self.page).grid(row=0, stick=W)
  17.                 Label(self.page, text = '账户: ').grid(row=1, stick=W, pady=10)
  18.                 Entry(self.page, textvariable=self.username).grid(row=1, column=1, stick=E)
  19.                 Label(self.page, text = '密码: ').grid(row=2, stick=W, pady=10)
  20.                 Entry(self.page, textvariable=self.password, show='*').grid(row=2, column=1, stick=E)
  21.                 Button(self.page, text='登陆', command=self.loginCheck).grid(row=3,column=1, stick=E)
  22.                 Button(self.page, text='注册管理人员',command=self.build).grid(row=3, stick=W, pady=10)

  23.         def loginCheck(self):
  24.                 self.db = Db()
  25.                 rel = self.db.Login(self.username.get(),self.password.get())
  26.                 if rel == 1:
  27.                         self.page.forget()
  28.                         MainPage(self.root)
  29.                 else :
  30.                         showinfo(title='错误', message='请重新输入!')
  31.                
  32.         def build(self):
  33.                 self.page.forget()
  34.                 buildPage(self.root)
  35.        

  36.                
  37.                
复制代码





这是没问题的代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-18 19:40:55 | 显示全部楼层
帖子没发好233,大佬们看一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-18 20:54:31 | 显示全部楼层
self.db = Db()   DB没有实例化成功哦,试试from db import Db  确定有这个包吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-18 22:00:12 | 显示全部楼层
Stubborn 发表于 2019-4-18 20:54
self.db = Db()   DB没有实例化成功哦,试试from db import Db  确定有这个包吗?

添加了之后提示:ImportError: cannot import name 'Db' from 'db' (C:\Users\ASUS\Desktop\db.py)
  1. from buildPage import *
  2. from LoginPage import *
  3. from view import *
  4. import pymysql

  5. class Db():
  6.         def __init__(self):
  7.                 self.conn = pymysql.connect(host="localhost",user="root",password="jinmu",database="memberlibrary",charset="utf8")
  8.                 self.cur = self.conn.cursor()#创建游标
  9.                
  10.         def AddAdmin(self,username,fpassword):
  11.                 self.username = username
  12.                 self.fpassword = fpassword
  13.                 a = StringVar()
  14.                 sql_query = "select AdminName from Admin where AdminName='%s'" % (username)
  15.                 self.cur.execute(sql_query)  # 返回一个迭代器
  16.                 c = self.cur.fetchall()#接收全部信息
  17.                 if len(c) != 0:
  18.                         showinfo(title="注册失败",message="会员库已存在")#注册失败
  19.                         a = 0
  20.                         return a
  21.                 else :
  22.                         sql_insert = 'insert into admin(AdminName,AdminPassword) values("'+username+'","'+fpassword+'")' #新增会员库
  23.                         self.cur.execute(sql_insert)
  24.                         self.conn.commit() #提交事务
  25.                         self.cur.close()#关闭游标
  26.                         self.conn.close()#关闭数据库
  27.                         showinfo(title="新建成功",message="新建会员库成功")#提示新建会员库成功
  28.                         a = 1
  29.                         return a
  30.                        
  31.         def AddMember(self,name,sum,phone):
  32.                 self.name = name
  33.                 self.sum = sum
  34.                 self.phone = phone
  35.                 a = StringVar()
  36.                 sql_query = "select MemberPhone from membermessage where MemberPhone='%s'" % (phone)
  37.                 self.cur.execute(sql_query)
  38.                 c = self.cur.fetchall()
  39.                 if len(c) != 0:
  40.                         a = 0
  41.                         return a
  42.                 else :
  43.                         sql_insert = 'insert into membermessage(MemberName,MemberPhone,MemberBalance) values("'+name+'","'+phone+'","'+sum+'")'
  44.                         self.cur.execute(sql_insert)
  45.                         self.conn.commit()#提交事务
  46.                         self.cur.close()#关闭游标
  47.                         self.conn.close()#关闭数据库
  48.                         a = 1
  49.                         return a
  50.                
  51.         def AddActivity(self,activityname,activityprice,activitydetails):
  52.                 self.activityname = activityname
  53.                 self.activityprice = activityprice
  54.                 self.activitydetails = activitydetails
  55.                 a = StringVar()
  56.                 sql_query = "select ActivityName from activiymessage where ActivityName='%s'" % (activityname)
  57.                 self.cur.execute(sql_query)
  58.                 c = self.cur.fetchall()
  59.                 if len(c) != 0:
  60.                         a = 0
  61.                         return a
  62.                 else :
  63.                         sql_insert = 'insert into activiymessage(ActivityName,ActivityPrice,ActivityDetails) values("'+activityname+'","'+activityprice+'","'+activitydetails+'")'
  64.                         self.cur.execute(sql_insert)
  65.                         self.conn.commit()#提交事务
  66.                         self.cur.close()#关闭游标
  67.                         self.conn.close()#关闭数据库
  68.                         a = 1
  69.                         return a
  70.                        
  71.         def Delete(self):
  72.                 pass
  73.                
  74.         def Recompose(self):
  75.                 pass
  76.                
  77.         def Login(self,name,password):
  78.                 self.name = name
  79.                 self.password = password
  80.                 a = StringVar()
  81.                 sql_query = "select AdminName,AdminPassword from admin where AdminName='%s' and AdminPassword='%s'" % (self.name,self.password)
  82.                
  83.                 self.cur.execute(sql_query)  # 返回一个迭代器
  84.                 c = self.cur.fetchall()#接收全部信息
  85.                
  86.                 if len(c) == 0:
  87.                         showinfo(title='登录失败',message="账户错误或者密码错误")#登录失败
  88.                         a = 0
  89.                         return a
  90.                 else:
  91.                         self.cur.close()#关闭游标
  92.                         self.conn.close()#关闭数据库
  93.                         showinfo(title='登录成功',message="登录成功,进入会员库")#登陆成功
  94.                         a = 1
  95.                         return a
  96.                        
  97.        
  98.                
复制代码



这是我的db.py     
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-18 22:37:51 | 显示全部楼层    本楼为最佳答案   
这个应该是导包上的问题,为什么你自己定义的模块都用用import * 的,没有封装成类还是设置文件?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-19 18:55:57 | 显示全部楼层
Stubborn 发表于 2019-4-18 22:37
这个应该是导包上的问题,为什么你自己定义的模块都用用import * 的,没有封装成类还是设置文件?

我把关于数据库的所有操作都放在db这个文件中了,命名为db.py,然后其他的py文件调用这个文件DB()类中的函数,这是封装还是设置,我有点分不清楚了0.0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-2 01:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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