मैं .grid() का उपयोग करके GUI बना रहा हूं क्योंकि इसमें बहुत सारे बटन हैं। मैंने उन्हें स्क्रीन के शीर्ष पर एक इंटरैक्टिव Frame (frameone) में रखा है और मेरे पास नीचे frametwo है जहां मैं उपयोगकर्ता के बटन के आधार पर संदेशों को प्रिंट करना चाहता हूं प्रेस संदर्भ के लिए यह एक युद्धपोत खेल है। लेकिन जब मैं frametwo बनाता हूं और उसमें listbox डालता हूं, तो टेक्स्ट को फिट करने के लिए सूची बॉक्स का आकार बदल दिया जाता है। मैं नहीं चाहता कि हर बार अधिक label दर्ज किए जाने पर विंडो का आकार बदलना पड़े। यहां एक कामकाजी उदाहरण है:

from tkinter import *
import tkinter as tk
window = Tk()
window.title("Window")
window.geometry('150x350')     #I wanted the demonstration to work for you.

def addline():                 #Adding sample text
    Label(listbox, text='this is text').grid(sticky=N+W)

frameone = Frame(window, height=10, width=10)
frameone.grid(sticky=N)        #The top where the button goes...

Label(frameone, bg='yellow', text='This is frameone\n\n\n').grid(row=0, column=0)
                               #The yellow here is where all the buttons go...
addtext = Button(frameone, text = 'Add line:', command=addline)
addtext.grid(column=0,row=1)   #Button to add text...

frametwo = Frame(window, bg='red', height=10, width=10)
frametwo.grid(sticky=W)        

listbox = Listbox(frametwo)
listbox.grid(sticky=W, pady=3, padx=3)         #This is the listbox that is wrongly resizing.

scrolltwo = Scrollbar(window, orient=HORIZONTAL)
scrolltwo.configure(command=listbox.yview)
scrolltwo.grid(sticky=S+E)     #I got lazy, I will put this on the side w/rowspan etc.

window.mainloop()

यदि यह एक दोहराव वाला प्रश्न है या किसी तरह सुपर स्पष्ट है, तो मैं क्षमा चाहता हूं। इसके अलावा, खेद है कि मेरा जीयूआई घृणित है... मुझे समझ में नहीं आता कि यह विधि क्यों काम नहीं कर रही है। समाधानों की तलाश में, मैंने पाया कि .grid की कुछ बहुत अच्छी व्याख्याएं थीं और जब वे नहीं हैं तो सूचियों का आकार कैसे बदला जाए। सब कुछ मदद करता है, धन्यवाद।

1
McKay L 30 जून 2018, 07:54

1 उत्तर

सबसे बढ़िया उत्तर

आप Listbox, listbox को Frame की तरह व्यवहार कर रहे हैं, जबकि वास्तव में यह अलग तरह से काम करता है। किसी Listbox में आइटम जोड़ने के लिए, इसके insert फ़ंक्शन का उपयोग करें। तो, अपनी समस्या को ठीक करने के लिए, प्रतिस्थापित करें:

Label(listbox, text='this is text').grid(sticky=N+W)

साथ में:

listbox.insert(END, 'this is text')

टिंकर Listbox विजेट पर अधिक जानकारी के लिए, एफ़बॉट दस्तावेज़ीकरण देखें, यहां

1
Artemis 3 जुलाई 2018, 22:12