亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? databaseviewer.py

?? PERL語(yǔ)言資料 可以用于PERL程序設(shè)計(jì)
?? PY
字號(hào):
# Fig. 27.27 DatabaseViewer.py
# A GUI Database Viewer

import os
import glob
from Tkinter import *
import tkMessageBox
import Pmw
from gadfly import gadfly

class DatabaseViewer( Frame ):

   def __init__( self ):
      Frame.__init__( self )
          
      self.gadflyPath = "C:\\Python\\Gadfly"  # path to database
      self.databaseDirectories = {} # database locations
      self.databaseNames = []       # list of available databases
      self.connection = None        # connection to database
      self.currentQuery = StringVar()  # current query string
      self.queryDisplay = None         # query results text dialog

      # populate databaseNames list
      os.path.walk( self.gadflyPath, self.getDatabase, 0 )

      # congifure master
      self.master.title( 'Database GUI Viewer' )
      self.master.columnconfigure( 0, weight = 1 )
      self.master.rowconfigure( 0 , weight = 1 )
      self.master.grid()      

      # build GUI components
      self.buildGUI()

   def destroy( self ):
      self.closeDatabase()
      Frame.destroy( self )
         
   def getDatabase( self, path, dirname, names ):
      """Get names of all databases in specified directory."""
      os.chdir( dirname )     # change directories

      # get list of all database files in gadfly directory
      databaseFiles = glob.glob( "*.gfd" )
      
      for database in databaseFiles:
         databaseName = database[ :-4 ]
         self.databaseNames.append( databaseName )
         self.databaseDirectories[ databaseName ] = dirname   

   def createSection( self, parent, labelText, numberOfColumns ):
      """Creates a subsection of a frame."""

      # create enclosing frame
      frame = Frame( parent, relief = 'groove', borderwidth = 5 )
      frame.columnconfigure( tuple( range( numberOfColumns ) ),
         weight = 1 )
                      
      # create label for frame
      label = Label( frame, text = labelText,
         font = ( 'Arial', 12, 'bold' ),  background =
         'dark gray', foreground = 'dark blue', relief = 'ridge',
         borderwidth = 3 )
      label.grid( row = 0, columnspan = numberOfColumns,
         sticky = 'new' )
      
      return frame

   def createButton( self, parent, name, action, gridRow,
      gridColumn ):
      """Creates a button."""
      return Button( parent, text = name, command = action ) \
         .grid( row = gridRow, column = gridColumn )

   def buildGUI( self ):
      """Build database viewer display."""

      #------------------Configure self-----------------------#
      Pmw.initialise()
      self.grid( row = 0, column = 0, sticky = 'nesw' )
      #-------------------------------------------------------#
      
      #-------------Build 'Select Database' Section-----------#
      databaseFrame = self.createSection( self,
         "Select Database", 3 )
      databaseFrame.grid( row = 0, column = 0, sticky = 'nesw',
         columnspan = 2 )
      
      # allows users to select from databases
      self.databaseComboBox = Pmw.ComboBox( databaseFrame,
         scrolledlist_items = self.databaseNames, dropdown = 1 )
      self.databaseComboBox.grid( row = 1, column = 0, padx = 3,
         sticky = 'e' )

      # button to open selected database
      openDatabaseButton = self.createButton( databaseFrame,
         "Open Database", self.openDatabase, 1, 1 )
    
      # button to close current database
      closeDatabaseButton = self.createButton( databaseFrame,
         "Close Database", self.closeDatabase, 1, 2 )
      #-------------------------------------------------------#

      #------------Build 'Table Information' Section----------#
      tableFrame = self.createSection( self,
         "Table Information", 2 )
      tableFrame.grid( row = 1, column = 0, columnspan = 2,
         sticky = 'nesw', pady = 5 )

      # List of available tables
      Label( tableFrame, text = "Available Tables:", relief =
         'raised' ).grid( row = 1, column = 0, sticky = 'nesw' )
      self.tableList = Pmw.ScrolledListBox( tableFrame,
         selectioncommand = self.displayColumnInfo )
      self.tableList.configure( listbox_height = 11 )
      self.tableList.grid( row = 2, column = 0, sticky = 'nesw' )

      # Information about selected table
      Label( tableFrame, text = "Column Names:", relief =
         'raised' ).grid( row = 1, column = 1, sticky = 'nesw' )
      self.tableDisplay = Pmw.ScrolledText( tableFrame,
         text_wrap = 'none' )
      self.tableDisplay.configure( text_height = 13 )
      self.tableDisplay.configure( text_width = 50 )
      self.tableDisplay.grid( row = 2, column = 1,
         sticky = 'nesw' )
      #--------------------------------------------------------#
      
      #-----------Build 'Query Statement' Section--------------#
      queryFrame = self.createSection( self,
         "Query Statement:", 1 )
      queryFrame.grid( row = 2, column = 0, sticky = 'nesw',
         columnspan = 2 )

      # Entry field for query statement
      self.queryEntry = Pmw.EntryField( queryFrame,
         command = self.executeQuery, entry_textvariable =
         self.currentQuery )
      self.queryEntry.grid( row = 1, column = 0, sticky = 'ew',
         pady = 5 )
           
      # Button to execute statement
      queryExecuteButton = self.createButton( queryFrame,
         "Execute Query", self.executeQuery, 2, 0 )
      #-------------------------------------------------------#

   def openDatabase( self ):
      """Open selected database."""

      if self.connection:
         tkMessageBox.showerror( "Database already open",
            "You must close the current database before "
            + "opening a new one." )
         return   

      # open database
      try:

         # get path to specified database
         databaseName = self.databaseComboBox.get()
         databasePathname = os.path.join( self.gadflyPath,
            self.databaseDirectories[ databaseName ] )
         self.connection = gadfly( databaseName, 
            databasePathname )
      except KeyError:
         tkMessageBox.showerror( "Select Database",
            "You must first select a database to open." )
         return
      except:
         tkMessageBox.showerror( "Database Error",
            "Error opening database." )
         return

      # get table info
      cursor = self.connection.cursor()
      cursor.execute( "select * from __table_names__" )
      results = cursor.fetchall()

      # display list of tables
      for item in results:
         self.tableList.insert( 0, item[ 1 ] )

      cursor.close()
      
   def displayColumnInfo( self ):
      """Display columns from selected table."""

      if self.connection == None:
         return
      
      # get a record from this table
      tableName = self.tableList.getcurselection()
      cursor = self.connection.cursor()
      cursor.execute( "select * from %s" % tableName )
      results = cursor.description 

      # display column information
      self.tableDisplay.clear()

      for row in results:
         self.tableDisplay.insert( END, row[ 0 ] + '\n' )

      cursor.close()
 
   def executeQuery( self ):
      """Execute user-entered query statement."""

      # user must open database to execute query
      if self.connection == None:
         tkMessageBox.showerror( "Open Database",
            "You must first select and open a database." )
         return

      cursor = self.connection.cursor()
      
      # execute query, raise exception on error
      try:
         queryString = self.currentQuery.get() # retrieve string
         queryString = queryString.replace( '"', "'" )
         cursor.execute( queryString )
         results = cursor.pp()
      except Exception, errorMessage:
         results = "The SQL statement cannot be executed.\n" \
            + "The full SQL error message is:\n\n%s" \
            % errorMessage
         
      # display results in new window
      if self.queryDisplay:
         self.queryDisplay.destroy()

      self.queryDisplay = Pmw.TextDialog( title =
         "Results for: %s" % queryString, defaultbutton = 0 )
      self.queryDisplay.configure( text_height = 10 )
      self.queryDisplay.configure( text_width = 50 )
      self.queryDisplay.insert( END, results )
      self.queryDisplay.configure( text_state = "disabled" )
      self.queryDisplay.activate( globalMode = 'nograb' )

      cursor.close()
      
   def closeDatabase( self ):
      """Close current database."""

      if self.connection == None:
         return
      
      # close connection and clear display fields
      self.connection.close()
      self.connection = None
      self.databaseComboBox._entryfield.clear()
      self.tableList.clear()
      self.tableDisplay.clear()
         
if __name__ == "__main__":
   DatabaseViewer().mainloop()


########################################################################## 
# (C) Copyright 2001 by Deitel & Associates, Inc. and Prentice Hall.     #
# All Rights Reserved.                                                   #
#                                                                        #
# DISCLAIMER: The authors and publisher of this book have used their     #
# best efforts in preparing the book. These efforts include the          #
# development, research, and testing of the theories and programs        #
# to determine their effectiveness. The authors and publisher make       #
# no warranty of any kind, expressed or implied, with regard to these    #
# programs or to the documentation contained in these books. The authors #
# and publisher shall not be liable in any event for incidental or       #
# consequential damages in connection with, or arising out of, the       #
# furnishing, performance, or use of these programs.                     #
##########################################################################   

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区3| 黄色精品一二区| 精品国产免费人成电影在线观看四季| 国产黄色精品网站| 亚洲国产欧美在线人成| 亚洲精品一区二区三区福利 | 国产福利精品导航| 亚洲黄网站在线观看| 欧美不卡在线视频| 欧美日韩日日摸| 久久天天做天天爱综合色| 欧美亚洲动漫制服丝袜| 风间由美一区二区av101| 奇米一区二区三区av| 一区二区三区欧美日韩| 欧美国产日韩在线观看| 日韩一级黄色大片| 91成人在线精品| 成人黄色av网站在线| 精品一区二区三区在线观看| 亚洲综合丁香婷婷六月香| 中文字幕高清一区| 26uuu国产电影一区二区| 欧美日韩精品系列| 色菇凉天天综合网| 99精品久久久久久| 不卡一区二区三区四区| 久久不见久久见免费视频1| 午夜不卡av在线| 亚洲精品中文在线影院| 亚洲欧洲精品一区二区三区| 久久久www成人免费毛片麻豆| 在线播放欧美女士性生活| 欧美影院一区二区三区| av亚洲产国偷v产偷v自拍| 国产伦精品一区二区三区免费迷| 六月婷婷色综合| 日韩avvvv在线播放| 丝袜亚洲精品中文字幕一区| 亚洲成人免费视频| 亚洲国产另类av| 亚洲精品国产精华液| 亚洲女性喷水在线观看一区| 国产精品久久久久久久久快鸭| 国产亚洲欧美在线| 亚洲国产精品成人久久综合一区 | 欧美日韩一区二区三区高清| 91麻豆精品一区二区三区| av成人老司机| 99久久国产免费看| 成人激情免费视频| 99久久久久久| 99热在这里有精品免费| 91亚洲资源网| 色综合久久天天| 欧洲色大大久久| 欧美精品tushy高清| 91精品国产欧美一区二区成人| 91精品国产综合久久婷婷香蕉 | 国产日韩高清在线| 国产日产精品一区| 国产精品不卡一区| 亚洲三级在线看| 亚洲韩国精品一区| 免费日韩伦理电影| 国产精品一二三四| 99国产精品国产精品毛片| 色婷婷国产精品| 7777精品伊人久久久大香线蕉超级流畅| 欧美一区二区三区免费大片| 精品久久五月天| 国产精品日韩精品欧美在线| 亚洲激情成人在线| 蜜桃av噜噜一区| 国产999精品久久久久久绿帽| 99久久综合精品| 欧美日本在线一区| 2021中文字幕一区亚洲| 中文字幕一区二区三区乱码在线| 亚洲精品高清视频在线观看| 午夜a成v人精品| 懂色av中文一区二区三区| 91久久一区二区| 日韩精品一区二区三区蜜臀| 中文字幕第一区综合| 亚洲国产日韩a在线播放| 国产又黄又大久久| 在线免费亚洲电影| 久久这里只有精品6| 最好看的中文字幕久久| 亚洲bt欧美bt精品777| 久久99精品一区二区三区| 97精品国产97久久久久久久久久久久| 欧美日韩一二三区| 中文字幕欧美日韩一区| 婷婷综合另类小说色区| 国产成人亚洲综合a∨猫咪| 色哦色哦哦色天天综合| 久久久久久久久久看片| 亚洲资源在线观看| 国产suv一区二区三区88区| 欧美性感一区二区三区| 国产欧美一区二区精品秋霞影院| 亚洲妇女屁股眼交7| 国产成人免费在线视频| 91精品国产综合久久久久久漫画 | 欧美午夜精品久久久久久超碰| 久久久午夜精品理论片中文字幕| 亚洲已满18点击进入久久| 国产精品一品二品| 日韩一区二区在线观看| 亚洲女同一区二区| 成人午夜av影视| 精品国产麻豆免费人成网站| 天天综合色天天综合色h| 91丨九色丨蝌蚪富婆spa| 久久久另类综合| 免费一区二区视频| 4438x成人网最大色成网站| 亚洲人成网站影音先锋播放| 国产精品一区二区三区乱码 | 欧美影院一区二区| 国产精品美女久久久久久2018| 蜜臀av性久久久久蜜臀aⅴ四虎| 在线观看视频欧美| 国产精品女人毛片| 国产福利精品一区二区| 精品成人a区在线观看| 日本vs亚洲vs韩国一区三区| 欧美特级限制片免费在线观看| 日韩美女啊v在线免费观看| 国产成人久久精品77777最新版本| 日韩色在线观看| 美女在线一区二区| 91精品国产综合久久香蕉麻豆| 午夜视频在线观看一区二区 | 972aa.com艺术欧美| 欧美激情资源网| 国产精品亚洲成人| 国产色产综合色产在线视频| 精品一区二区三区视频在线观看 | 国产美女娇喘av呻吟久久| 日韩一卡二卡三卡| 麻豆视频观看网址久久| 日韩欧美一区二区免费| 免费一级片91| 26uuu亚洲| 国产尤物一区二区| 国产精品天天看| 成人av在线播放网站| 国产精品成人一区二区三区夜夜夜| www.久久久久久久久| 中文字幕亚洲在| 色老汉一区二区三区| 一区二区三区国产| 欧美日韩三级在线| 美腿丝袜亚洲色图| 国产色产综合产在线视频| bt7086福利一区国产| 一区二区三区国产精华| 欧美人妇做爰xxxⅹ性高电影| 日本一不卡视频| 亚洲精品一区二区三区在线观看 | 亚洲18色成人| 日韩欧美国产综合一区 | 亚洲国产精品成人综合色在线婷婷 | 热久久国产精品| 久久色在线观看| 99视频在线观看一区三区| 夜夜操天天操亚洲| 日韩欧美一区二区免费| 丰满放荡岳乱妇91ww| 日韩毛片精品高清免费| 欧美日韩国产片| 国产成人在线观看免费网站| 亚洲欧美日韩在线| 91精品国产欧美一区二区成人| 国产精品911| 一区二区三区自拍| 欧美成人乱码一区二区三区| 成人免费视频网站在线观看| 亚洲国产视频在线| 26uuu国产日韩综合| 日本福利一区二区| 国产在线播精品第三| 一区二区欧美视频| 久久婷婷久久一区二区三区| 97精品久久久午夜一区二区三区| 日韩精品一卡二卡三卡四卡无卡| 久久婷婷久久一区二区三区| 日本韩国一区二区三区视频| 久久精品国产一区二区三区免费看| 国产精品美女www爽爽爽| 欧美巨大另类极品videosbest | 成人精品gif动图一区| 午夜国产不卡在线观看视频| 久久女同精品一区二区| 欧美日本不卡视频| 91亚洲国产成人精品一区二三| 日韩一区精品视频|