Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

  • Moderators
Δημοσ.

Θελω λιγο τα φωτα σας γιατι το κεφαλι μου κοντευει να εκραγει. Φτιαχνω GUI για μια εφαρμογη και δουλευω με tabs. Η εφαρμογη ειναι για τσατ στα δεξια ειναι το widget που εμφανιζει τα μυνηματα, αριστερα του η λιστα με τα ατομα στα οποια μπορει να στειλει και απο κατω ενα entry box με ενα κουμπι στο οποιο γραφεις το μυνημα για να το στειλεις. Το προβλημα που εχω ειναι οτι καθε φορα που δημιουργω ενα tab κανει focus σε αυτο και δουλευει μονο αυτο (δουλευει παντα μονο το τελευταιο). Οτι και να εχω δοκιμασει δεν δουλεψε. Καμια ιδεα!?

 

Η συναρτηση στην οποιο δημιουργω τα tab ειναι στο σποιλερ

 

 

def add_tab(self, name):
        padX = 10
        padY = 10
        frame1 = Frame(self.notebook)
        self.notebook.add(frame1, text=name)
        self.notebook.bind_all('<<NotebookTabChanged>>')
        self.notebook.pack()
        parentFrame = Frame(frame1)
        parentFrame.grid(padx=padX, pady=padY, stick=E + W + N + S)
        readChatGroup = Frame(parentFrame)
        self.receivedChats = Text(readChatGroup, bg='white', width=60, height=30, state=DISABLED)
        self.friends = Listbox(readChatGroup, bg='white', width=30, height=30, font=('Fixed', 10), selectmode=BROWSE)
        self.friends.grid(row=0, column=1, sticky=E + N + S)
        self.friends.bind('<Double-Button-1>', self.list_item_click)
        lines = tuple(open('list.txt', 'r'))
        for line in range(1, len(lines)):
            self.friends.insert(line, lines[line])
        writeChatGroup = Frame(parentFrame)
        self.chatVar = StringVar()
        self.chatField = Entry(writeChatGroup, width=80, textvariable=self.chatVar)
        sendChatButton = Button(writeChatGroup, text='Send', width=10, command=self.handleSendChat)
        self.receivedChats.grid(row=0, column=0, sticky=W + N + S, padx=(0, 10))
        self.chatField.grid(row=0, column=0, sticky=W)
        sendChatButton.grid(row=0, column=1, padx=5)
        readChatGroup.grid(row=1, column=0)
        writeChatGroup.grid(row=2, column=0, pady=10)
        writeChatGroup.grid(padx=padX, pady=padY, stick=E + W + N + S)

Δημοσ.

Δοκίμασε να απενεργοποιήσεις κάποια τμήματα κώδικά για να δείς που περίπου είναι το λάθος. Άν είναι σαυτή τη συνάρτηση γιατί μπορεί να είναι και κάπου άλλου στον κώδικά σου.

 

To writeChatGroup το κάνεις grid 2 φορές

κάντο μία writeChatGroup.grid(row=2, column=0, padx=padX, pady=padY, sticky=E + W + N + S)

 

κάνε όλα τα stick sticky

 

Στο bind_all έχεις event χωρίς event handler.

 

Αν έχεις κάνει το from tkinter import ttk κάνε το Frame  ttk.Frame μήπως δεν συνεργάζεται καλά με το σκέτο Frame γιατί το Notebook το υποστηρίζει μόνο το ttk

 

Τα

self.notebook.bind_all('<<NotebookTabChanged>>')(αυτό είναι χωρίς event handler)
και        self.notebook.pack()

καλύτερα να τα βάλεις στη συνάρτηση που δημιουργεί το Notebook έτσι κάθε φορά που κάνεις μια καρτέλα ξαναδημιουργείς event και ξανακάνεις pack το notebook πράγμα που πρέπει να γίνει μία φορά.

 

Δεν ξέρω αν τα παραπάνω δημιουργούν το πρόβλημα γιατί δεν μπορώ να το δοκιμάσω.

 

Αν θές βάλε τα grid κάτω από τη δημιουργία του κάθε widget και αραίωσε λίγο τον κώδικα γιατί έτσι διαβάζεται κάπως δύσκολα

  • Moderators
Δημοσ.

για την ωρα το εκανα χωρις tab γιατι μου σπασε τα νευρα! Θα δοκιμασω ομως αυτα που ειπες μολις βρω χρονο και θα ενημερωσω

  • Moderators
Δημοσ.

με μια γρηγορη ματια που εριξα και τις αλλαγες που ειπες δεν αλλαξε κατι. Τουλαχιστον ειδα οτι το gui γαμιεται οταν αλλαζω απο windows σε unix οποτε εφτιαξα αυτο :P

 

επισης ειχα βγαλει τον event handler γιατι κατι δοκιμαζα! 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...