मैं टिंकर के साथ बटनों का ग्रिड (क्लिक करने योग्य सेल प्रभाव प्राप्त करने के लिए) बनाने की कोशिश कर रहा हूं।
मेरी मुख्य समस्या यह है कि मैं grid
नहीं बना सकता और बटन मूल विंडो को स्वतः आकार और फिट कर सकते हैं।
उदाहरण के लिए, जब मेरे पास ग्रिड पर बटनों की संख्या अधिक होती है, तो बटनों को सिकोड़ने के बजाय ताकि ग्रिड खिड़की के अंदर फिट हो जाए, मुझे एक स्ट्रेच्ड फ्रेम मिलता है जो ऑफ स्क्रीन हो जाता है।
मैं जिस प्रभाव की तलाश कर रहा हूं वह है ग्रिड सभी उपलब्ध स्थान को भरना, फिर उस स्थान के भीतर फिट होने के लिए अपनी कोशिकाओं का आकार बदलना। मैंने प्रलेखन में पढ़ा है, लेकिन मैं अभी भी यह नहीं समझ सकता कि इसे कैसे काम करना है।
यह मूल कोड है जो मेरा प्रारंभिक बिंदु है:
def __init__(self):
root = Tk()
frame = Frame(root)
frame.grid()
#some widgets get added in the first 6 rows of the frame's grid
#initialize grid
grid = Frame(frame)
grid.grid(sticky=N+S+E+W, column=0, row=7, columnspan=2)
#example values
for x in range(60):
for y in range(30):
btn = Button(grid)
btn.grid(column=x, row=y)
root.mainloop()
4 जवाब
आपको गैर-शून्य भार के लिए पंक्तियों और स्तंभों को कॉन्फ़िगर करने की आवश्यकता है ताकि वे अतिरिक्त स्थान ले सकें:
grid.columnconfigure(tuple(range(60)), weight=1)
grid.rowconfigure(tuple(range(30)), weight=1)
आपको अपने बटनों को भी कॉन्फ़िगर करने की आवश्यकता है ताकि वे सेल भरने के लिए विस्तृत हों:
btn.grid(column=x, row=y, sticky="news")
यह सभी तरह से किया जाना है, इसलिए यहां एक पूर्ण उदाहरण दिया गया है:
from tkinter import *
root = Tk()
frame = Frame(root)
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)
frame.grid(row=0, column=0, sticky="news")
grid = Frame(frame)
grid.grid(sticky="news", column=0, row=7, columnspan=2)
frame.rowconfigure(7, weight=1)
frame.columnconfigure(0, weight=1)
#example values
for x in range(10):
for y in range(5):
btn = Button(frame)
btn.grid(column=x, row=y, sticky="news")
frame.columnconfigure(tuple(range(10)), weight=1)
frame.rowconfigure(tuple(range(5)), weight=1)
root.mainloop()
@Vaughn Cato ने यहां एक उत्कृष्ट उत्तर दिया। हालांकि, उन्होंने गलती से अपने उदाहरण में बाहरी कोड का एक गुच्छा शामिल कर लिया है। यहां एक साफ-सुथरा और अधिक संगठित पूर्ण उदाहरण दिया गया है जो उसका उदाहरण करता है।
from tkinter import *
#Create & Configure root
root = Tk()
Grid.rowconfigure(root, 0, weight=1)
Grid.columnconfigure(root, 0, weight=1)
#Create & Configure frame
frame=Frame(root)
frame.grid(row=0, column=0, sticky=N+S+E+W)
#Create a 5x10 (rows x columns) grid of buttons inside the frame
for row_index in range(5):
Grid.rowconfigure(frame, row_index, weight=1)
for col_index in range(10):
Grid.columnconfigure(frame, col_index, weight=1)
btn = Button(frame) #create a button inside frame
btn.grid(row=row_index, column=col_index, sticky=N+S+E+W)
root.mainloop()
स्क्रीनशॉट:
जब यह पहली बार खुलता है (छोटा):
आपके द्वारा विंडो को बड़ा करने के बाद:
विंडो के बड़े होने पर बटनों का विस्तार करने के लिए, बटन को संशोधित करने का प्रयास करें। ग्रिड प्रविष्टि को निम्नानुसार संशोधित करें:
btn.grid(column=x, row=y, sticky=N+S+E+W)
जब आप स्क्रॉलबार (कम से कम मैक में) का उपयोग करते हैं तो ग्रिड वजन विधि काम नहीं कर सकती है, इसलिए इसका उपयोग करते समय विजेट और स्क्रॉलबार को फ्रेम के अंदर पैक करें और फिर फ्रेम को ग्रिड करें।
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।