pythonでguiを書く

データ構造コースの最後に、Pythonでguiインターフェイスを作成し、6つの並べ替えアルゴリズムを使用して配列を並べ替えました。非常に興味深い感じです。tkinterについての不快な投げ方です。ドキュメントが少なすぎます。ヘルプを使用して、いくつかの組み込みメソッドを確認することしかできません。使用する##

インターフェース部品コード
最初に醜いインターフェースQAQを見てください

# - *- coding: utf-8-*-from tkinter import*import datetime
import time
from data_sort import My_Sort
import random
import sys
import re
# ヒルバブリングを挿入して、ヒープソートをすばやく選択します
classApplication(Frame):
 def __init__(self,root):"""初期化,さまざまなボタンやテキストボックスを作成する"""
  # 番号を格納する番号リストを作成する
  self.number =[]
  # countは、ソートされる数値の数を記録するために使用されます
  self.count =10086
  self.my =My_Sort()super(Application,self).__init__(root)
  self.grid()
  self.root = root
  Label(self, text="\t\t").grid(row=0, column=0)Label(self, text="ソートモードを選択してください:",
    font ='STXingkai -25 bold', fg ="#30E6FF").grid(row=0, column=1)
  # ユーザーがデータソースを選択できるようにするラジオボタンを作成する
  self.choose =StringVar()
  self.choose.set(None)
  self.input_number =Radiobutton(self, text="1手動で番号を入力します", variable=self.choose,
          value="右側のダイアログボックスにスペースで区切ってランダムな数字を入力してください",
          command=self.update_text,
          justify="center",
          font='STXingkai -20 bold', fg="#DF4FE7").grid(row=2, column=0, sticky=W)
  self.rand_number =Radiobutton(self, text="2ランダムな数値を生成する", variable=self.choose,
          value ="下の[ランダム番号の生成]ボタンをクリックしてください",
          command = self.update_text,
          justify ="center",
          font ='STXingkai -20 bold', fg="#DF4FE7").grid(row=3, column=0, sticky=W)
  # 各機能のボタンを作成する
  self.srand_btn =Button(self, text ="ランダムな数字を生成する",
         command = self.create_rand_number
         ). grid(row=4, column=0, sticky=E,
          ipadx="4p", ipady="4p")
  self.get_txt_btn =Button(self, text="テキストボックス番号を読む",
        command=self.get_Text_number
        ). grid(row=4, column=1,
          ipadx="4p", ipady="4p")
  self.exit_btn =Button(self, text="プログラムを終了します", command=self.GuiExit,
        foreground="red", font='STXingkai -15 bold',).grid(row=4, column=2, ipadx="4p", ipady="4p")
  self.insert_btn =Button(self, text="挿入ソート",
         command =self.insert
         ). grid(row=5, column=0, ipadx="4p", ipady="4p")
  self.shell_btn =Button(self, text="ヒルソート",
          command = self.shell
          ). grid(row=5, column=1, ipadx="4p", ipady="4p")
  self.buddle_btn =Button(self, text="バブルソート",
         command = self.buddle
         ). grid(row=5, column=2, ipadx="4p", ipady="4p")
  self.quick_btn =Button(self, text="クイックソート",
        command = self.quick
        ). grid(row=6, column=0, ipadx="4p", ipady="4p")
  self.select_btn =Button(self, text="並べ替えを選択",
         command = self.select
         ). grid(row=6, column=1, ipadx="4p", ipady="4p")
  self.heap_btn =Button(self, text="ヒープソート",
        command = self.heap
        ). grid(row=6, column=2, ipadx="4p", ipady="4p")
  self.view_gui =Button(self, text="GUIソースコードを表示",command = self.view_gui
        ). grid(row=7, column=0, ipadx="4p", ipady="4p")
  self.view_sort =Button(self, text="ソートソースコードを表示",command = self.view_sort
        ). grid(row =7, column=1, ipadx="4p", ipady="4p")Label(self, text="\t").grid(row=1, column=2)Label(self, text="入力および出力ボックス:", font='STXingkai -16 ',  fg="#F9A728").grid(row=1, column=3)Label(self,text="").grid(row=8,column=0)
  self.txt =Label(self, text="", width=37, height=5,borderwidth=2,
       foreground="black",background="#E0E0E0",
       font='STXingkai -20 ', fg="#4169E1")
  self.txt.grid(row=2, column=1, sticky=W)
  self.efficiency =Label(self, text="",
        width=35,height=10,borderwidth=2,
        font='STXingkai -20 ', fg="gray",
        background="#C6E2FF")
  self.efficiency.grid(row=9, column=1, rowspan=1)
  # 入力および出力テキストボックスを作成する
  self.output_txt =Text(self, width=60, height=15, wrap=WORD,
        font='STXingkai -20 ', border=5, fg="gray")
  self.output_txt.grid(row=2, column=4, rowspan=5)
  # 出力テキストボックスのスクロールバーを作成します
  self.scrollbar =Scrollbar(self)
  self.output_txt.configure(yscrollcommand=self.scrollbar.set)
  self.scrollbar['command']= self.output_txt.yview
  self.scrollbar.set(0.5,1)
  self.scrollbar.grid(row=3, column=5)
  self.scrollbar.grid_anchor(E)
 # ランダムな数字を生成する
 def create_rand_number(self):if self.choose.get()=="下の[ランダム番号の生成]ボタンをクリックしてください":for i inrange(self.count):
    r = random.randint(-10000,10000)
    self.number.append(r)
   self.txt['text']="ランダム番号が正常に生成されました"
  elif self.choose.get()=="右側のダイアログボックスにスペースで区切ってランダムな数字を入力してください":
   self.txt['text']="右側のダイアログボックスにスペースで区切ってランダムな数字を入力してください"else:
   self.txt['text']="次のステップに進む前に、モードを選択してください"
 # プログラムを終了します
 def GuiExit(self):
  self.quit()
 def update_text(self):"""ラジオボタンの値とテキストコンテンツを更新します"""
  message =""
  message += self.choose.get()
  self.txt['text']= message
  if self.choose.get()=="右側のダイアログボックスにスペースで区切ってランダムな数字を入力してください":
   self.get_Text_number()
 # 入力および出力テキストボックスで番号を取得します
 def get_Text_number(self):try:
   string = self.output_txt.get(0.0,END)
   list = re.split(' ',string)
   flag =0for i in list :
    num =int(i)
    self.number.append(num)
    flag +=1
   self.count = flag
   self.txt['text']="テキストボックスの番号を正常に読み取った"
  except:
   pass
 # 整えます
 # 挿入ソート
 def insert(self):iflen(self.choose.get())>10:
   start = datetime.datetime.now()
   self.number = self.my.insert_sort(self.number)
   end = datetime.datetime.now()
   self.get_effiency_writefile(start,end,name="挿入ソート",text="insert")
   self.write_number_output()else:
   self.txt['text']="最初にソートモードを選択してください"
 # ヒルソートを呼び出す
 def shell(self):iflen(self.choose.get())>10:
   start = datetime.datetime.now()
   self.number = self.my.shell_sort(self.number)
   end = datetime.datetime.now()
   self.get_effiency_writefile(start, end, name="ヒルソート", text="shell")
   self.write_number_output()else:
   self.txt['text']="最初にソートモードを選択してください"
 # バブルソートを呼び出す
 def buddle(self):iflen(self.choose.get())>10:
   start = datetime.datetime.now()
   self.number = self.my.buddle_sort(self.number)
   end = datetime.datetime.now()
   self.get_effiency_writefile(start, end, name="バブルソート", text="buddle")
   self.write_number_output()else:
   self.txt['text']="最初にソートモードを選択してください"
 # クイックソートを呼び出す
 def quick(self):iflen(self.choose.get())>10:
   start = datetime.datetime.now()
   self.number = self.my.quick_sort(self.number,0,self.count-1)
   end = datetime.datetime.now()
   self.get_effiency_writefile(start, end, name="クイックソート", text="quick")
   self.write_number_output()else:
   self.txt['text']="最初にソートモードを選択してください"
 # コール選択ソート
 def select(self):iflen(self.choose.get())>10:
   start = datetime.datetime.now()
   self.number = self.my.select_sort(self.number)
   end = datetime.datetime.now()
   self.get_effiency_writefile(start, end, name="並べ替えを選択", text="select")
   self.write_number_output()else:
   self.txt['text']="最初にソートモードを選択してください"
 # ヒープソートを呼び出す
 def heap(self):iflen(self.choose.get())>10:
   start = datetime.datetime.now()
   self.number = self.my.heap_sort(self.number)
   end = datetime.datetime.now()
   self.get_effiency_writefile(start, end, name="並べ替えを選択", text="heap")
   self.write_number_output()else:
   self.txt['text']="最初にソートモードを選択してください"
 # ソートされた番号を入力テキストボックスと出力テキストボックスに書き込みます
 def write_number_output(self):
  temp =""for i in self.number:
   temp +=str(i)
   temp +=" "
  self.output_txt.delete(0.0,END)
  self.output_txt.insert(0.0,temp)
 # インターフェイスのソースコードを表示する
 def view_gui(self):try:
   f =open("Text_File\\gui.txt",'r+')
   txt = f.read()
   self.output_txt.delete(0.0,END)
   self.output_txt.insert(0.0,txt)
  except:
   pass
 # ソートソースコードを表示
 def view_sort(self):try:
   f =open("Text_File\\sort.txt",'r+')
   txt = f.read()
   self.output_txt.delete(0.0,END)
   self.output_txt.insert(0.0,txt)
  except:
   pass
 def get_effiency_writefile(self,start,end,name,text):
  write = name +"開始時間:\n"
  write +=str(start)
  write +="\n"
  write +="終了時間:\n"
  write +=str(end)
  write +="\n"
  write +="時間コスト:"
  write +=str(end-start)
  write +="\n"
  self.efficiency['text']= write
  try:
   f =open('Text_File\\%s_result.txt'%(text),'w')for i in self.number:
    write +=str(i)
    write +=" "
   f.write(write)
   f.close()
  except:
   pass
if __name__ =='__main__':
 root  =Tk()
 root.title("データ構造-並べ替え")
 root.geometry("400x400")
 app =Application(root)
 root.iconbitmap("hanhan.ico")
 root.mainloop()

ソートコード##

# - *- coding: utf-8-*-import math
import sys
classMy_Sort():
 #1 挿入ソート
 def insert_sort(self,lists):
  count =len(lists)for i inrange(1,count):
   key = lists[i]
   j = i-1while j>=0:if lists[j]> key:
     lists[j+1]= lists[j]
     lists[j]= key
    j-=1return lists
 #2 ヒルソート,ループ内のステップサイズは整数であることにPythonで注意する必要があります
 def shell_sort(self,lists):
  count =int(len(lists))
  step =2
  group =int(count /step)while group >0:for i inrange(group):
    j = i+group
    while j< count:
     k = j - group
     key = lists[j]while(k>=0):if lists[k]>key:
       lists[k+group]= lists[k]
       lists[k]= key
      k -= group
     j += group
   group =int(group/step)return lists
 #3 バブルソート
 def buddle_sort(self,lists):
  count =len(lists)for i inrange(count):for j inrange(i+1,count):if lists[i]>lists[j]:
     lists[i],lists[j]= lists[j],lists[i]return lists
 #4 直接選択ソート
 def select_sort(self,lists):
  count =len(lists)for i inrange(count):
   min = i
   for j inrange(i+1,count):if lists[min]> lists[j]:
     min = j
   lists[min],lists[i]= lists[i],lists[min]return lists
 #5 クイックソート
 def quick_sort(self, lists, left, right):if left > right:return
  i = left
  j = right
  while i != j:while lists[j]>= lists[left] and i < j:
    j -=1while lists[i]<= lists[left] and i < j:
    i +=1if i < j:
    lists[i], lists[j]= lists[j], lists[i]
  lists[left], lists[i]= lists[i], lists[left]
  self.quick_sort(lists, left, i -1)
  self.quick_sort(lists, i +1, right)return lists
 #6 ヒープソート
 # チューニングヒープ
 def adjust_heap(self,lists,i,size):
  lchild =2*i+1
  rchild =2*i+2
  max = i
  if i <int(size/2):if lchild < size and lists[lchild]> lists[max]:
    max = lchild
   if rchild < size and lists[rchild]> lists[max]:
    max = rchild
   if max !=i:
    lists[max],lists[i]= lists[i],lists[max]
    self.adjust_heap(lists,max,size)
 # ヒープを作成する
 def build_heap(self,lists,size):for i inrange(0,int((size/2)))[::-1]:
   self.adjust_heap(lists,i,size)
 # ヒープソート
 def heap_sort(self,lists):
  size =int(len(lists))
  self.build_heap(lists,size)for i inrange(0,size)[::-1]:
   lists[0],lists[i]= lists[i], lists[0]
   self.adjust_heap(lists,0,i)return lists

Recommended Posts

pythonでguiを書く
Python書き込みTetris
pythonでwinプログラムを書く方法
Qixiの告白アーティファクトをPythonで作成する
pythonでtryステートメントを書く方法
03.Pythonエントリの演算子
Pythonの結合関数
12.Python3でのネットワークプログラミング
pythonでステートメントを印刷する
PythonGUIインターフェイスプログラミング
Pythonでの同時リクエスト
pythonでゲームを書く方法を教えてください
Pythonでのコンテキスト管理
pythonの算術演算子
告白プログラムをpythonで書く方法
PythonでのMongoDBの使用
PythonのStr文字列
Pythonでの計算ジオメトリ
Pythonでの同時リクエスト(パート2)
Pythonのタプルの添え字
Pythonでの継承について話す
Python3.9の注目すべき更新ポイント
Pythonオープン読み取りおよび書き込み
Pythonアプリケーションを3分でコンテナ化
pythonのイントロスペクションとは何ですか
PythonGUIシミュレーション実装計算機
pythonのオブジェクト指向とは何ですか
Pythonのジェネレーターとイテレーター
Pythonで文字列について話す
pythonはダウンロードソフトウェアをコンパイルします
pythonでのwheelの使用法
Pythonの対数法の要約
Python開発でのパンダの使用
pythonでnohupコマンド命令を使用する
pythonに関数のオーバーロードはありますか
python設定ファイルの書き方
PythonでNumpyを使い始める
詳細な並べ替えアルゴリズム(Pythonで実装)
pythonコードでラップする方法
Pythonでのrc1の意味
pythonの一般的なエラーと解決策
Pythonで括弧を省略する方法
Pythonでの辞書の詳細な使用法
Pythonでのガベージコレクションについて学ぶ
pythonで数値をフィルタリングする方法
Pythonの数字は何ですか?
PythonでExcelを読む方法
Pythonにはいくつかのキーワードがあります
Pythonのすべてがオブジェクトです
pythonでエラーを表示する方法
npはpythonで何をしますか
Pythonのモジュールについて話す
Pythonで変数を理解する方法
pythonで変数をクリアする方法
pythonでのタプルの使用法
PythonでSQLiteを使用する方法
実際の戦闘| Python書き込みポートスキャナー
pythonmysqlのパラメータ化の説明
python言語のアルゴリズムはありますか
pythonでキャッシュファイルを削除する方法
Pythonでサードパーティモジュールを導入する方法