문제

TIX를 사용하여 ComboBox를 만들고 입력 상자가 비어 있으면 간헐적으로 충돌이 발생합니다.

저는 Python이며 GUI 프로그래밍을 매우 새로운 GUI 프로그래밍에 매우 새로운 것을 사용하여 스스로를 가르치기 위해 예제를 사용했습니다.

다음 예제 코드를 사용하는 경우 입력란에 값을 입력하거나 드롭 다운 메뉴 양식을 선택해야합니다 만 입력란을 비워두고 이동을 누르면 파이썬이 파이썬이 중단됩니다.

import Tix
import tkMessageBox

class App(object):
    def __init__(self, window):
        window.winfo_toplevel().wm_title("test")
        self.window = window

        self.combo = Tix.ComboBox(window)
        self.combo.insert(Tix.END, 'thing1')
        self.combo.insert(Tix.END, 'thing2')
        self.combo.entry['state'] = "normal"
        self.combo['editable'] = True
        self.combo.pack()

        button = Tix.Button(window)
        button['text'] = "Go"
        button['command'] = self.go
        button.pack()

    def go(self):
        tkMessageBox.showinfo('info', self.combo['selection'])

if __name__ == '__main__':
    root = Tix.Tk()
    App(root)
    root.mainloop()
.

============================== 충돌 세부 사항 :

  Problem signature:
  Problem Event Name:   APPCRASH
  Application Name: python2.7.exe
  Application Version:  0.0.0.0
  Application Timestamp:    4cfbf049
  Fault Module Name:    ntdll.dll
  Fault Module Version: 6.1.7600.16385
  Fault Module Timestamp:   4a5bdb3b
  Exception Code:   c0000005
  Exception Offset: 0002e23e
  OS Version:   6.1.7600.2.0.0.256.48
  Locale ID:    2057
  Additional Information 1: 0a9e
  Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
  Additional Information 3: 0a9e
  Additional Information 4: 0a9e372d3b4ad19135b953a78882e789
.

그래서

a] 예제가 잘못하고있는 것입니까?

b] 더 나은 방법이 있습니까?

c] 나는 전혀 tix를 사용해야합니까?

일부 사람들은 tix에서 슈티에서 수줍어하는 것처럼 보입니다. Tkinter 만 사용하십시오. 이 이유가 있습니까? tix를 사용하지 않아야합니까?

+++++++++++++++++++++++++++

OK 그래서 value= ''를 추가하여 value= ''를 추가하여 Return String이 비어 있지 않아서 필요할 때 값을 Lstrip ()합니다.

self.combo = Tix.ComboBox(window, value =' ')
...
tkMessageBox.showinfo('info', self.combo['selection'].lstrip())
.

매우 추악하지만 지금 나를 충돌시키는 것을 멈추게합니다. 누군가가 더 현명하게 나에게 더 나은 대답을 줄 때까지. 사용자가 공간을 삭제 한 다음 '이동'을 눌러서 다시 충돌시킵니다!

도움이 되었습니까?

해결책

I am not Tix expert, but this should fix the problem:

tkMessageBox.showinfo('info', self.combo.entry.get())

In between the lines, I would recommend using wxPython for learning GUI programming. It was great for me as a learning environment.

import wx

class MainWin(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.combo = wx.ComboBox(self, choices=["Thing 1", "Thing 2"])      
        self.button = wx.Button(self, label="Go")
        self.button.Bind(wx.EVT_BUTTON, self.OnButton)

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.combo, 0, wx.EXPAND)
        self.sizer.Add(self.button, 0, wx.EXPAND)
        self.SetSizerAndFit(self.sizer)     

        self.Show()

    def OnButton(self, e):
        wx.MessageBox(self.combo.GetValue())

app = wx.App(False)
main_win = MainWin(None)
app.MainLoop()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top