對於這個GUI的名單上有五個對象:全名,聯繫方式,所需的語言,難度等級,並與語言的經驗。我對這項任務的設計是,它是一個簡單的「外文書店請求管理器」,我可以在其中添加,編輯和刪除外文書籍的請求。是/ GUI中沒有checkbutton爲布爾屬性來管理對象
我希望前四個對象是Entry字段,然後第五個(經驗)是一個複選框,對於這個數據屬性,我想讓它成爲代表是/否狀態的布爾值,以表示是否有經驗用他們要求的語言。
從我的教科書和前面的例子中,我可以創建一個基本的y/n複選框,但是它出現在我的窗口的頂部,我被困在如何編寫它以便體驗數據屬性是檢查按鈕爲布爾屬性,而不是一個條目的形式和,無論被選中(是或否/它是否是真或假)當我使用STR方法,使用ListboxSelect以顯示每個屬性的值出現。
當我試圖將第五個屬性與其餘屬性分開以便它是一個複選框而不是Entry表單時,我無法運行我的程序,並且在嘗試創建bool屬性時我遇到了錯誤,並且不確定是否需要先修復布爾屬性或複選框,是否他們攜手共處等
我的問題是: 1)我是否使用正確的格式爲bool屬性創建y/n複選框? 2)如何編寫複選框,使其顯示在體驗標籤旁邊,而不是當前寫入的輸入表單?
我很抱歉,如果這是非常愚蠢的問,但我花了7個小時試圖解決這些問題,並沒有想出我做錯了什麼,以及如何更正和添加什麼是必要的,以完成這個程序。
與檢查按鈕無關,使用ListboxSelect小部件,它顯示的對象位於我正在查找的地址處,但並未實際顯示我以爲我寫過的內容,它會顯示: 'Full Name:,Contact info:,語言:,難度:,語言經驗:(然後這裏是布爾屬性的複選框,我還沒有弄清楚)'在我的程序的Book Requests部分。我包括我的程序和當前問題的圖片以及一些代碼。 does not display what I had thought I had written
import tkinter
import request
class Application:
def __init__(self):
self.__requests = []
self.__selected_index = 0
self.__selected_request = None
self.__window = tkinter.Tk()
self.__window.title('Foreign Language Bookstore Request Manager')
self.__full_name = tkinter.StringVar()
self.__contact_info = tkinter.StringVar()
self.__language = tkinter.StringVar()
self.__difficulty = tkinter.StringVar()
self.__experience = tkinter.StringVar()
self.cb_var1 = tkinter.IntVar()
self.cb_var2 = tkinter.IntVar()
self.cb_var1.set(0)
self.cb_var2.set(0)
self.cb1 = tkinter.Checkbutton(self.__window, \
text='Yes', variable=self.cb_var1)
self.cb2 = tkinter.Checkbutton(self.__window, \
text='No', variable=self.cb_var2)
self.cb1.pack()
self.cb2.pack()
self.build_input_frame('Full Name: ', self.__full_name)
self.build_input_frame('Contact info (phone, email): ', self.__contact_info)
self.build_input_frame('Desired language: ', self.__language)
self.build_input_frame('Difficulty level 1- beginner, 2- intermediate, 3- advanced: ', self.__difficulty)
self.build_input_frame('Experience with language? ', self.__experience)
frame = tkinter.Frame(self.__window)
self.__add_button = tkinter.Button(frame, text='Add Request',
anchor=tkinter.W, command=self.add_request)
self.__add_button.pack(side='left')
self.__save_button = tkinter.Button(frame, text='Save Request',
anchor=tkinter.W, command=self.save_request, state=tkinter.DISABLED)
self.__save_button.pack(side='left')
self.__delete_button = tkinter.Button(frame, text='Delete Request',
anchor=tkinter.W,
command=self.delete_request, state=tkinter.DISABLED)
self.__delete_button.pack()
frame.pack()
frame = tkinter.Frame(self.__window)
label = tkinter.Label(frame, text='Book Requests')
self.__requests_list = tkinter.Listbox(frame, width=80,
selectmode=tkinter.SINGLE)
self.__requests_list.bind('<<ListboxSelect>>', self.select_request)
label.pack()
self.__requests_list.pack()
frame.pack()
def build_input_frame(self, label, textvariable):
"""Build the top frames of the window for being able to enter data."""
frame = tkinter.Frame(self.__window)
label = tkinter.Label(frame, text=label, width=50, anchor=tkinter.W)
entry = tkinter.Entry(frame, textvariable=textvariable, width=30)
label.pack(side='left')
entry.pack(side='right')
frame.pack()
def add_request(self):
"""Get the values from the bound variables and create a new Request."""
r = request.Request(self.__full_name.get(), self.__contact_info.get(),
self.__language.get(), self.__difficulty.get(),
self.__experience.get())
self.__requests.append(r)
self.__requests_list.insert(tkinter.END, str(r))
def select_request(self, event):
"""Get the Request at the index selected, and set the Entry fields
with its values."""
# Get the current selection from the Listbox. curselection() returns
# a tuple and we want the first item
# Get the current selection from the Listbox. curselection() returns
# a tuple and we want the first item
current_selection = self.__requests_list.curselection()
if current_selection:
self.__selected_index = current_selection[0]
# Grab the Request object from self.__request at that index
self.__selected_request = self.__requests[self.__selected_index]
# Use it's values to set the StringVars
self.__full_name.set(self.__selected_request.get_full_name())
self.__contact_info.set(self.__selected_request.get_contact_info())
self.__language.set(self.__selected_request.get_language())
self.__difficulty.set(self.__selected_request.get_difficulty())
self.__experience.set(self.__selected_request.get_experience())
# Make sure the Save button is enabled
self.__save_button.config(state=tkinter.NORMAL)
self.__delete_button.config(state=tkinter.NORMAL)
def delete_request(self):
"""Remov the Request at the index selected then set the Entry fields
to empty values."""
if 0 <= self.__selected_index < len(self.__requests):
del self.__requests[self.__selected_index]
self.__requests_list.delete(self.__selected_index)
# Call the method to deselect the item, clear Entry fields, and
# disable buttons.
self.after_selected_operation()
def save_request(self):
"""Set the selected Request's fields and then persist its __str__
representation to the Listbox."""
self.__selected_request.set_full_name(self.__full_name.get())
self.__selected_request.set_contact_info(self.__contact_info.get())
self.__selected_request.set_language(self.__language.get())
self.__selected_request.set_difficulty(self.__difficulty.get())
self.__selected_request.set_experience(self.__experience.get())
# Listbox widgets don't have a way of updating an item in place. So
# We'll delete the item at a particular index and then add it
self.__requests_list.delete(self.__selected_index)
self.__requests_list.insert(self.__selected_index,
str(self.__selected_request))
# Call the method to deselect the item, clear Entry fields, and
# disable buttons.
self.after_selected_operation()
def after_selected_operation(self):
"""Clear the selected index, request, and disable buttons."""
self.__selected_index = -1
self.__selected_request = None
self.__full_name.set('')
self.__contact_info.set('')
self.__language.set('')
self.__difficulty.set('')
self.__experience.set('')
# Make sure the Save and Delete buttons are disabled
self.__save_button.config(state=tkinter.DISABLED)
self.__delete_button.config(state=tkinter.DISABLED)
你如何運行腳本?當我運行它時,我得到一個空白窗口 – davedwards