Tkinter Buton Fonksiyonları ve Yerleşimleri

Başlatan canyener, 04 Haziran 2017 - 01:04:39

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

canyener

Merhaba hocam, ben bir program (CivSelector) yapmaya çalışıyorum ama 2 adet sorunla karşılaştım:

1. Aşağıdaki kodda görülebileceği gibi her butonun kendi üzerinde yazan liste elemanını(string) lst adlı listeden çıkarmasını amaçlıyorum. Her buton için ayrı ayrı uğraşmak yerine for döngüsü ile işimi gördüm ama şimdi de bütün butonlar en son lst elemanını taşıyor, ve hepsi sadece en son elemanı silmeye çalışıyorlar. Her buton için ayrı ayrı .bind yapmak istemiyorum, bunun kısa yolu var mıdır?

2. widget yerleşimlerinde sıkıntı yaşıyorum. Üssteki "Click Civs to Ban" Label'ını pack() ile, butonları grid() ile birleştirmeye çalıştığımda hata alıyorum. Hem yazıyı hem de butonları grid() ile yerleştirdiğimde Labelın uzunluğundan dolayı 1. ve 2. columnlar arası boşluk oluyor. Labelı kısaltmak dışında yapabileceğim bir şey var mıdır?

Programlamada yeniyim, şimdiden teşekkürler.



from tkinter import *

lst = ["America", "Arabia", "Assyria", "Austria", "Aztects",
       "Babylon", "Brazil", "Byzantium", "Carthage", "Celts",
       "China", "Denmark", "Egypt", "England", "Ethiopia",
       "France", "Germany", "Greece", "Huns", "Inca", "India",
       "Indonesia", "Iroquois", "Japan", "Korea", "Maya",
       "Mongolia", "Morocco", "Netherlands", "Ottomans", "Perisa",
       "Poland", "Polynesia", "Portugal", "Rome", "Russia",
       "Shoshone", "Siam", "Songhai", "Spain", "Sweden", "Venice",
       "Zulus"]

def bans(event,window,i):
    lst.remove(i)

window = Tk(); TITLE = "CIV SELECTOR 1.0"
window.title(TITLE)
window.geometry("800x400")
window.configure(background = "#333")

line1 = Label(window, text = "Click Civs to Ban")
line1.config(bg="#333",fg="white",font=("Arial",14,"bold"))
line1.grid(row=0, column=0)

x=3; y=0
for i in lst:
    a = Button(text=str(i) , bg="brown", fg="White")
    a.config(font=("Arial" , 11 , ), width = 12)
    a.bind("<Button-1>", lambda event:bans(event,window,str(i)))
    a.grid(row = x, column = y)
    y += 1
    if(y%4==0):
        x += 1
        y = 0
   
window.mainloop()




mhmtkrktr

Bildiğim bir konu değil, öncelikle bunu belirteyim. Fakat atayım belki tutar ;-)

For döngüsü ile değişkenin içinde ki elemanlar için buton oluşturuyorsun ancak hangi butonun ne fonksiyonu olacağı bilgisi eksik kalıyor. Bunun da döngü içinde tek tek tanımlanması gerekiyor gibi geldi bana?
Bu işlemin switch & case ile yapılması gerekiyor sanki. 

canyener

Hangi butonun ne fonksiyonu olacağı bilgisinin eksik kaldığının farkındayım aslında ama buna bir türlü çözüm üretemiyorum maalesef. her butona ayrı ayrı buton.bind yapmaktan başka bir çaresi olmalı  ;D