我想使用Tkinter在python中进行gui应用程序的排序

时间:2012-02-04 19:28:42

标签: python user-interface tkinter

我编写了这段代码,在此函数gen()id用于随机生成数字进行排序。我的代码就像

from Tkinter import *
import random

class Sorting( Frame ):
   def __init__( self ):
      Frame.__init__( self )

      self.master.title( "Sorting" )
      self.master.rowconfigure( 5, weight = 1 )
      self.master.columnconfigure( 5, weight = 1 )
      self.grid( sticky = W+E+N+S )

      #label for sort intro      
      self.label1 = Label( self, text = "Select Sort", width = 25 , height=2)
      self.label1.grid( row = 0, column = 1, sticky = N )

      #Radio buttons for sorts
      self.button1 = Radiobutton( self, text = "Bubble Sort" )
      self.button1.grid( row = 1, column = 0, sticky = W+E+N+S )

      self.button2 = Radiobutton( self, text = "Quick Sort" )
      self.button2.grid( row = 1, column = 1, sticky = W+E+N+S )

      self.button3 = Radiobutton( self, text = "Shell Sort" )
      self.button3.grid( row = 1, column = 2, sticky = W+E+N+S )

      #label to store value
      def gen():
         for x in range(0,10):
            num=random.randint(0,100)
            self.label2 = Label( self,text='%s'%num, width = 2, height = 2 )
            self.label2.grid( row =3 , columnspan =10 , sticky = W+E+N+S )

      #button to generate number
      self.button4 = Button( self,text='Generate no.', command=gen )
      self.button4.grid( row = 2,column=1, sticky = W+E+N+S )
      self.rowconfigure( 5, weight = 1 )
      self.columnconfigure( 5, weight = 1 )

def main():
   Sorting().mainloop()   

if __name__ == "__main__":
   main()

我想用它来生成随机数,然后对它们进行排序。有任何建议。

1 个答案:

答案 0 :(得分:3)

试试这个:

  #label to store value
  def gen():
      self.nums = []
      for x in range(0, 10):
          self.nums.append(random.randint(0, 100))
      # . . . . . . . . . .  .    <- maybe here call sorting method on self.nums
      num = ''.join('%4i' % num for num in self.nums)
      self.label2 = Label( self, text=num, width=2, height=2)
      self.label2.grid(row=3, columnspan=10, sticky=W+E+N+S)

要排序的值存储在self.nums中。您希望在将标签显示在标签之前将排序算法调用到该列表。

enter image description here

我尽量保持代码尽可能多。从这一点来看,它可以进一步优化。例如,您可以替换:

  self.nums = []
  for x in range(0, 10):
      self.nums.append(random.randint(0, 100))

  self.nums = [random.randint(0, 100) for x in range(10)]