宠.. 2024-01-12 12:13 采纳率: 0%
浏览 10

弹出新框架时如何使其他控件呈现灰色且处于禁用状态

在python的tkinter库中,弹出新框架时如何使其他控件呈现灰色且处于禁用状态

例如在酷狗音乐中,当点击新建歌单时将弹出窗口,此时背景所有框架呈灰色且处于禁用状态,如何在python的tkinter实现此功能?

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-01-12 14:19
    关注

    【相关推荐】



    • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:python 网络音乐播放器(二):tkinter 实现歌词同步滚动
    • 除此之外, 这篇博客: 利用python操纵数据库--数据写入与tkinter实现界面查询中的 三、基于tkinter实现的可视化 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

      前面主要是调用python的pymysql进行操作,实现简单的写入和查询,这里面存在很多问题,比如重复ID写入等,文章主要是做一些简单的功能,并不打算实现数据库的事务等,以及类似于商城等系统设计。这部分主要是使用tkinter实现一个查询界面,调用pymysql进行数据查询.tkinter参照的书主要是Manning出版社的Python and Tkinter Programming,封面长这个样子的(希望Manning能给我打钱~)。在进行介绍前友情提醒Mac系统是10.14.6的朋友,千万不要用这个!!!,系统bug会引起反复重启,别问我怎么知道的,具体可以参照

      issue37833tkinter mainloop() function logs me out of my mac
      在这里插入图片描述

      首先,使用python的tkinter制作框架,即定义一个框架

      def frame(self,side):
      	w = Frame(self)
      	w.pack(side=side,expand = YES, fill = BOTH)
          return w
      

      在这之后,需要定义按钮,比如你需要点击

      def button(self,side,text,fg = None,command = None):
      	w = Button(self,text= text,fg = fg,command = command)
          w.pack(side = side,expand = YES,fill = BOTH)
      

      然后按照上述书籍定义不同的功能组件即可,最后是写入对应的查询操作

      from tkinter import *
      import tkinter.messagebox as messagebox
      from get_query import excute_query,export_results
      import os
      import pandas as pd
      
      
      class drawGraph(Frame):
          def __init__(self):
              Frame.__init__(self)
              self.pack(expand=YES,fill=BOTH)
              self.master.geometry("500x600")
              self.master.title("SQL查询器")
              self.master.iconname("查询界面")
      
              def frame(self,side):
                  w = Frame(self)
                  w.pack(side=side,expand = YES, fill = BOTH)
                  return w
      
              def button(self,side,text,fg = None,command = None):
                  w = Button(self,text= text,fg = fg,command = command)
                  w.pack(side = side,expand = YES,fill = BOTH)
                  return w
      
              def text_frame(label):
                  input1 = Label(root,text =label).pack()
                  input_text = StringVar()
                  name = Entry(root,width = 40,textvariable = input_text,pdx = 20,pdy = 10).pack()
                  input_text.set(" ")
                  return input_text,name
      
              display = StringVar()
              newEntry = Entry(self,relief = RAISED,textvariable = display,width = 1)
              newEntry.pack(side = TOP,expand = YES, fill = BOTH)
      
      
              def get_query():
                  query_context = newEntry.get()
                  rows,cols = excute_query(query_context)
                  text = Text(self,height = 26,width = 150)
                  text.insert(END,export_results(rows,cols))
                  text.pack()
       
       #           if query_context:
       #              Message(self,text = export_results(rows,cols),relief= SUNKEN).pack()
       #           else:
       #               Message(self,text = "请输入查询语句或检查SQL语法!" ).pack()
                  return export_results(rows,cols)
      
      
              opsF =frame(self,TOP)
              for char in ["查询","清空"]:
                  if char == "查询":
                      btn = button(opsF,LEFT,char,command= get_query)
                  if char =="清空":
                      btn = button(opsF,LEFT,char,fg = "blue",command=lambda w=display: w.set(""))
          
              #rows
      #        Label(self,text = "输入下载地址:").pack(side = LEFT,padx=5,pady = 10)
      #        e=StringVar()
      #        SecondEntry = Entry(self,relief = RAISED,textvariable = e,width = 1)
      #        SecondEntry.pack(side = TOP,expand = YES, fill = BOTH)
      
              opf = frame(self,TOP)
              displayNew =  StringVar()
              temp_entry = Entry(opf,relief = RAISED,textvariable = displayNew, width = 1)
              temp_entry.pack(side =LEFT,expand = YES, fill = BOTH)
              
              displayName =  StringVar()
              temp_Name = Entry(opf,relief = RAISED,textvariable =displayName, width = 1)
              temp_Name.pack(side = LEFT,expand = YES, fill = BOTH)
              
              def export_result_query():
                  pathName = temp_entry.get()
                  name = temp_Name.get()
                  query_context = newEntry.get()
                  rows,cols = excute_query(query_context)
                  df_data =export_results(rows,cols)
                  df_data.to_excel("{0}{1}.xlsx".format(pathName,name))
              #    Message(self,text = '{0}{1}'.format(pathName,name),relief= SUNKEN).pack()
      
              button(self,BOTTOM,"退出查询器",fg= 'red',command=exit)
      
              opsB =frame(self,BOTTOM)
              for char in ["输出结果","清空路径","清空名称"]:
                  if char == "输出结果":
                      btn = button(opsB,LEFT,char,command = export_result_query)
                  if char == "清空路径":
                      btn = button(opsB,LEFT,char,fg= 'red',command=lambda w=displayNew: w.set(""))
                  if char == "清空名称":
                      btn = button(opsB,LEFT,char,fg= 'red',command=lambda w=displayNew: w.set(""))
              
      
      

      在上面定义完了查询界面组件以及对应的查询按钮功能,下面就需要定义对应的数据库连接和对应的操作了(export函数放在exucte里面最好不过了)

      import pymysql
      import pandas as pd
      from CON_CONSTS import ip_port,host,user,passwd,db
      
      def excute_query(context):
          try:
              con = pymysql.connect(host = host,port = ip_port,\
                  user = user,\
      		    passwd = passwd,\
      		    db = db, \
      		    charset = 'utf8')
              cur = con.cursor()
              cur.execute(context)
          except:
              print ("连接错误!")
          finally:
              if con:
                  con.close()
          cols = []
          for col in cur.description:
              cols.append(col[0])
          rows = cur.fetchall()
          #print(rows)
          return rows,cols
      
      def export_results(rows,desc):
          new_row = []
          new_row.append(desc)
          for row in rows:
              new_row.append(list(row))
          return pd.DataFrame(new_row[1:],columns=new_row[0])
      

      在CONST.py文件里面保存对应的连接数据即可

      '''
      ip_port: 端口
      host:    主机
      user:    用户名
      passwd:  密码
      db:      连接数据库
      '''
      

      最后我们在start.py中定义启动

      from excute_func import drawGraph
      
      if __name__ == "__main__":
          drawGraph().mainloop()
      

      至此,完成了最基本的配置,因为我的系统升级到了10.14.6,因此也就不能一边操作一边截图,保存最基本的验证了, 因此只能把系统版本之前的代码贴出来.


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 1月12日

悬赏问题

  • ¥15 from seleniumwire import webdriver 在抓取http://链接的时候会自动转https://这个怎么解决
  • ¥15 hive直连数据库模式插入mysql表数据失败(相关搜索:数据库)
  • ¥30 不会,学习,有偿解答
  • ¥15 SQL查询语句报错(检查)
  • ¥15 此表中公式应该怎么写
  • ¥15 求HI-TECH PICC 9.50 PL3安装包
  • ¥15 下载ctorch报错,求解
  • ¥15 如何入门学习c语言,单片机
  • ¥15 idea 编辑语言的选择
  • ¥15 Windows下部署Asmjit