2016-08-17 25 views
0

私は学校プロジェクトを行っています。プログラムの目的はチケットを販売することです。私の唯一の問題は「利用可能な座席と利用不可能な座席は色分けして表示する必要があります。私は合計250席あります、どのようにそれらを画面に表示するのですか?私はテーブルやグリッドを使うべきですか?またはキャンバス?私はあなたが私のためにコードすることを望んでいないこれは私の評価私はちょうどこの問題に効率的に取り組む方法のアイデアが必要です。Python Tkinterは視覚的に座席配置を表示します

私は、座席を表示するためにボタンを手動で使用しようとしましたが、そのうち250個は効率的ではありませんでした。

Button(master, text="seat").grid(row=0,column=0) * 250 != efficient 

私はまた、Forループ

self.seats = [] 
row_count = 0 
for i in range(250): 
    if(i > 5): 
     row_count += 1 #5 column table style 
    if(i < seats_taken): 
     self.seats.append(Button(master, bg='#ff0000')) #So taken seats are red bg 
     self.seats[i].grid(column=i+1 , row= row_count) 
    else: 
     self.seats.append(Button(master, bg='#ffffff')) #Available seats are white bg 
     self.seats[i].grid(column=i+1 , row= row_count) 

どのようにこの問題をtakleうと動的にボタンを作成しようとしましたか?

答えて

0

私は別のシナリオでこの問題に近づいています。各座席の変数を追跡して戻って色を変えることができます。 1つの方法は、tkinterウィジェットの名前を作成することです。seat1ここで、1は座席番号が変更されます。イベントのレイアウトに似たレイアウトが必要なので、いくつかの行が必要になります。特定の高さと幅の枠をキャンバスに配置することもお勧めします。この方法で、ウィンドウのサイズを変更することなくフレームをスクロールできます。

ここでは例です:今

import tkinter as tk 
from tkinter import ttk 


class MainApp(ttk.Frame): 

    def __init__(self, parent): 
     ttk.Frame.__init__(self, parent) 
     self.parent = parent 
     self.mainframe = ttk.Frame(self.parent) 
     self.canvas = tk.Canvas(self.mainframe) 
     self.frame = ttk.Frame(self.canvas) 
     self.gen_layout() 
     self.column_row_config() 

    def column_row_config(self): 
     self.parent.rowconfigure(0, weight=1) 
     self.parent.columnconfigure(0, weight=1) 

    def gen_layout(self): 
     self.mainframe.grid(row=0, column=0, sticky='nsew') 
     self.canvas.grid(row=0, column=0, sticky='nsew') 
     self.frame.grid(row=0, column=0, sticky='nsew') 
     self.make_seats() 
     self.access_seat_numb(1) 

    def make_seats(self): 
     # create 250 buttons on 10 rows 
     seat_counter = 1 
     for x in range(10): 
      for y in range(1, 26): 
       # print('creating seat %d' % seat_counter) 
       b = ttk.Button(
        self.frame, text='Seat%d' % seat_counter, 
        name='seat%d' % seat_counter 
       ) 
       # doesn't matter that the columns won't line up 
       b.grid(row=x, column=y) 
       seat_counter += 1 

    def access_seat_numb(self, numb): 
     # print(self.frame.children) 
     for k, v in self.frame.children.items(): 
      if k == 'seat%d' % numb: 
       # run some code on a seat numb 
       print(v._name) 

if __name__ == '__main__': 
    root = tk.Tk() 
    MainApp(root) 
    root.mainloop() 

access_seat_numbは、あなたがそのボタンを呼び出して変更することができる方法です。

関連する問題