Fungsi ini berulang, untuk mendapatkan file dari pengguna, hingga spreadsheet_name terakhir diulang. Masalahnya adalah ketika tombol batal ditekan pada jendela modal Tkinter askopenfilename, itu hanya terus berulang sampai loop for selesai.

  • Mencoba menambahkan if not self.file_name: break ke awal fungsi tetapi ini menimbulkan kesalahan karena belum ada.

  • Mencoba menambahkan if not self.filename: break ke akhir fungsi tetapi ini tidak berhasil karena self.file_name adalah daftar.

  • Mencoba menambahkan while self.file_name != '': dengan hasil yang sama.

    def get_files_from_user(self):
        for name in self.spreadsheet_name:
            tk.messagebox.showinfo(
                message='Please select {} Report'.format(name))
            self.file_name.append(
                filedialog.askopenfilename(
                    title="Select {} file".format(name),
                    filetypes=(('excel files', "*.xls"),
                               ("all files", "*.*"))))
            if not self.file_name:
                break

Saya ingin loop for berakhir jika variabel dalam daftar bernama self.file_name kembali kosong/tidak ada.

Bantuan bonus: Apa gunanya pernyataan pengembalian di akhir fungsi ini?

-1
David Alford 14 Agustus 2019, 07:37

1 menjawab

Jawaban Terbaik

Anda harus mendapatkan nilai dari askopenfilename dan memeriksa apakah itu bukan None, lalu break loop atau append() nilai ke daftar.

def get_files_from_user(self):
    for name in self.spreadsheet_name:

        tk.messagebox.showinfo(
            message='Please select {} Report'.format(name))

        result = filedialog.askopenfilename(
                title="Select {} file".format(name),
                filetypes=(('excel files', "*.xls"),
                           ("all files", "*.*"))))

        #if not result: 
        if result is None: 
            break

        self.file_name.append(result)
2
furas 14 Agustus 2019, 04:58